私は、文字列を使用している場合:'sizeof'を文字列に適用すると、サイズ(strlen)が返されるのはなぜですか?
char s1[]="hello, how are you?";
printf("%d\n",sizeof(s1));
それは文字、20の正確な、右の数値を表示します。しかし、私はポインタで初期化された文字列を持っている場合:
char *s2;
s2=(char*)malloc(sizeof(char));
strcpy(s2,s1);
printf("%d\n",sizeof(s2));
それはのサイズを出力しますマシンに依存するポインタ(鉱山では、8)。 なぜ、それらは同じ文字列なので、s2は8バイト、s1は20バイトですか?
コンパイル時にs2 []のサイズが分かっていますが、メモリの場所は変更できません。別のメモリ位置にs2を再割り当てしようとすると、エラーが発生します。場所はランタイムに決定されます。そのため、私は今理解しています。 –