-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)

さて、最初の出力行はかなり明確に見えます。しかし、2行目は私を混乱させます。strTrim のポインタを str2 にコピーするのはなぜですか? 私は本当にそれを取得しません。

4

1 に答える 1

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

malloc割り当てられたオブジェクトの値が不確定になった後。strlen引数を指定して呼び出すことstr2はできません: まだ文字列ではありません。

最初のバイトを無効にstr2し、(空の) 文字列へのポインタになります:

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