我被困在下面的c编程,并没有低估输出 #包括 #包括 int main() { 字符源[]=“Sayonara”; 字符目标[8]; strcpy(目标、来源); printf(“源字符串=%s\n”,源); printf(“目标字符串=%s\n”,目标); 返回0; }

我被困在下面的c编程,并没有低估输出 #包括 #包括 int main() { 字符源[]=“Sayonara”; 字符目标[8]; strcpy(目标、来源); printf(“源字符串=%s\n”,源); printf(“目标字符串=%s\n”,目标); 返回0; },c,C,输出:-源字符串= target string=Sayonara将源代码复制到目标代码后,目标代码不以空结尾。由于strcpy最多复制到第一个空字符('\0'),它将继续复制到数组目标的末尾,因为它的长度比源数组短一个。这将调用未定义的行为 #include<stdio.h> #include<string.h> int main() { char source[]="Sayonara"; char target[8]; strcpy(target

输出:-源字符串=

target string=Sayonara

源代码
复制到
目标代码
后,
目标代码
不以空结尾。由于
strcpy
最多复制到第一个空字符(
'\0'
),它将继续复制到数组
目标
的末尾,因为它的长度比
数组短一个。这将调用未定义的行为

#include<stdio.h>
#include<string.h>
int main()
{
    char source[]="Sayonara";
    char target[8];
    strcpy(target,source);
    printf("source string= %s\n",source);
    printf("target string= %s\n",target);
    return 0;
}


source
的长度为9,因为它有一个空终止符
\0
。您的复制超出了调用未定义行为的
目标的范围

您需要将
target
设置为相同的长度或更长的长度,以确保它在复制后以null结尾,并且不会发生越界访问

char target[9];

您正在将9个字节复制到8字节数组
目标
。这是一种未定义的行为,所以任何事情都可能发生。你确定输出吗?我想知道这个程序的控制流。C几乎是一种顺序语言,你的代码从上到下。这就是流程。我知道,但什么是控制流程???维基百科解释了什么是。。。“在这张图上,世界正在移动。”@Harishkumar;你们想知道那个程序的圈复杂度吗?
char target[9];
char source[]="Sayonara";
char target[9];
strcpy(target,source);