我对strcpy()有疑问。据我所知,我认为strcpy复制位于指针的字节而不是指针本身。 但是这段代码似乎反应不同。
char* str2 = (char*) malloc(50) ;
printf("str2:%d (%p), strTrim:%d (%p)", strlen(str2),*str2,strlen(strTrim),*strTrim) ;
strcpy(str2,strTrim);
printf("str2:%d (%p), strTrim:%d (%p)", strlen(str2),*str2,strlen(strTrim),*strTrim) ;
我得到的输出是:
str2: 64 (FFFFFFCD) , strTrim:8 (00000061)
str2:8 (00000061) , strTrim:8 (00000061)
现在,第一个输出线对我来说非常清楚。但第二行令我困惑。 为什么将strTrim的指针复制到str2?我真的不明白。
答案 0 :(得分:4)
char* str2 = (char*) malloc(50) ;
strlen(str2); // undefined behavior, `str2` has an indeterminate value
在malloc
之后,分配的对象具有不确定的值。你不能用strlen
参数调用str2
:它还不是一个字符串。
Nullify第一个字节,str2
将成为指向(空)字符串的指针:
str2[0] = '\0';
strlen(str2); // OK, strlen(str2) is 0