Code Bye

关于c语言知识 请教谢谢

#include <stdio.h>
#include <string.h> /*用strlen函数就加上*/
#define DENSITY 62.4 /*定义常数就直接这样定义*/
int main() {
float weight, volume;
int size, letters;
char name[10];
char name2[10];
char *name_p = name;
char *name_p2 = name2;
printf(“Hi! what”s your first name?\n”);
scanf(“%s”, name);
printf(“output 1:%s, %s\n”, name, name2);
strcpy(name2, name);
printf(“output 2:%s, %s\n”, name, name2);
printf(“output 3:%d, %d\n”, sizeof(name), sizeof(name_p));
return 0;
}
输入123456789012,output2的结果为什么是12和123456789012,跟分配内存有关系,但本人不知道具体是什么。
解决方案

20

name:0011-0020,由于输入12个字符(再加上结束标记)
所以,0011-0023都被占用了,那么首先是0021-0023是分配给谁的,假如刚好是空闲的,这里没有大问题,没有其他变量被覆盖
接下来,
 strcpy(name2, name);

这个会出现如下现象:
0001-0013:”123456789012″,实际上name的前3个被修改了(巧合的是前2个和原来一样),但是原来第3个由”3″变成了”\0″,相当于name变成了”12″
以上仅限于题主17楼描述的内存状况,实际上本人的测试结果和你是不一样的(大家用的编译器不一样)
小结:不要去越界,原因是你不知道会发生什么


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于c语言知识 请教谢谢