69,369
社区成员
发帖
与我相关
我的任务
分享
char *s; // 没初始化,所以地址是随机的,野指针!
gets(s); // 错误!指针指向的随机区域不一定属于你的进程空间,就算是也不一定可写。
puts(s); // 不算错误,也不正确!读取可能不属于自己进程空间的内容数据,大多情况是乱码!
// 严格来讲,这样写是不正确的,应该是 const char *s 才对:
char *s = "abc"; // 初始化,指向常量区的 "abc" 字符串;
gets(s); // 错误!指针指向的的是常量区,属于你的进程空间,但是只读不可写。
puts(s); // 正确!输出字符串!
char buffer[128] = { 0 }; // 初始化 128 个字节为空;
char *s = buffer; // 初始化,指向 buffer 可以读写。
gets(s); // 正确!也可以直接用 buffer 传参。数组名传递到参数则退化为指针,即和 char *s 相同意义。
puts(s); // 正确!也可以直接用 buffer 传参。数组名传递到参数则退化为指针,即和 char *s 相同意义。
char *s = calloc(128, sizeof(char)); // 初始化 s 为新申请的 128 字节内存空间。
gets(s); // 正确!
puts(s); // 正确!
free(s);