一个小C语言程序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/02 17:50:55
#include<stdio.h>
#include<string.h>
int main()
{
char str1[5]="1234";
char str2[4];
memcpy(str2,str1,strlen(str1));
printf("%s",str2);
return 0;
}
为什么结果是12341234而不是1234
程序运行的结果是:12341234
为什么结果不是:1234

我的问题是以上啊

你把str2[4]改成str2[5]就ok了

字符串是以'\0'结束的,
memcpy(str2,str1,strlen(str1))执行后,
str2为"1234"注意,没有'\0'。
你打印str2它会一直找到下一个'\0'才会结束。
1234后的内容是不确定的,
你这里1234后的内存正好是1234\0。
所以打印出12341234。

为什么结果是12341234而不是1234
没有标点看不懂

有问题

定义str2数组大小有问题,存放字符数组的最后一位是停止位,1234是四位,加上一个停止位是五位,应该定义char str2[5]

memcpy不在字符串末加‘\0’,所以printf连str1都输出了
//分配内存时str2在str1前边