这道c语言题目为什么用sizeof运行后是4但是strlen则什么都没有

如题所述

strcpy返回指针!一个指针的长度,在x86下是4字节,在x64下是8字节!
而问题出在,你向一个常量目标输出数据!
虽然,你用char * 声明了p,但是它却指向一个常量字符串。注意这个目标是不能随便改写的。win32有写保护,目标是只读的。任何对只读内存写入的操作都会失败。除非,调用win32系统函数修改属性并用函数写入。因此这样strcpy返回结果实际上是未定义的。
把第一行改一下。
char buf[64] = "abcdefgh";
char * p = buf;
后面的不用变。这样就不会什么都没有了。应该显示0。因为strlen返回'\0'字符所在的位置。
不知道我这样说你能否理解。我理解win32的常量字符串也花费了很长时间。
不要用sizeof去获取一个字符串的长度!sizeof仅仅获得目标的静态长度,也就是在栈上占用的字节数。追问

为什么将strcpy函数删除,就是只保留strlen(p),就可以正常输出3了呢

温馨提示:答案为网友推荐,仅供参考
相似回答