strcpy()复制指针?

时间:2012-07-16 13:11:45

标签: c strcpy

我对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?我真的不明白。

1 个答案:

答案 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