我被困在下面的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);