-2

我有一个关于 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 ?我真的不明白。

4

1 回答 1

4
char* str2  = (char*) malloc(50) ;
strlen(str2);  // undefined behavior, `str2` has an indeterminate value

malloc分配的对象有一个不确定的值之后。你不能strlenstr2参数调用:它还不是一个字符串。

取消第一个字节str2并将成为指向(空)字符串的指针:

str2[0] = '\0';
strlen(str2); // OK, strlen(str2) is 0
于 2012-07-16T13:15:58.010 回答