3

私はCの初心者プログラマーなので、私の言語/スタイルが専門的でない場合は失礼します。

質問:文字配列のサイズを決定しようとしているので、後でmalloc()を使用して割り当てるサイズを知ることができます。

私のコード:

char *dest;

char *src1 = "Test String";
char src2[] = "Testing!";

dest = (char *) malloc( sizeof(src1) );

問題は、src1とsrc2のメモリ内のサイズを確認したいということです。つまり、src1のサイズは11で、src2のサイズは8である必要があります。しかし、sizeof()から受け取った結果は次のとおりです。

  • sizeof(* src1)は1であるため、sizeof(char)
  • sizeof(src1)は4 <-なぜ誰かが説明できるのかわかりませんか?
  • sizeof(src2)は9 <-これが私が望むものであり、ヌルターミネータもサイズにカウントされると思います

しかし、src1のサイズを適切に決定する方法は?そして、どうしてsizeof(src2)は機能するのに、sizeof(src1)は機能しないのですか?

何をしようとしているのかわからない場合は、返信してください。わかりやすくするように努めます。

前もって感謝します。

4

3 に答える 3

3

sizeof渡した型のサイズを返します。src1 はポインタなので、4 を返します。

文字列のみを使用している場合は、単純に文字strlen(src1)列のサイズを取得するために使用します。割り当てラインは次のようになります

dest = (char*) malloc(strlen(src1) + 1); // add one for the \0
于 2012-10-28T16:21:04.997 に答える
2
sizeof(src1)

配列の長さではなく、環境上のポインタのサイズを示します。結果から、環境上のポインタのサイズは4です。のようにポインタが指す文字列リテラルのサイズを決定する場合
は、を使用する必要があります。strlenの場合src1

sizeof(src2) 

文字配列のサイズを返します。

2つの違いを理解するには、次のことを理解する必要があります。

char a [] =“ string”;の違いは何ですか。およびchar*p =“ string”;

于 2012-10-28T16:20:32.070 に答える
1

文字列の長さが必要な場合 (指定した数値からわかるように)、strlen(char *)関数を使用できます。(strlen 関数は の一部です<string.h>)

次のように文字列を渡すだけです。

int len1 = strlen(src1); // This will give 8 as intended
于 2012-10-28T16:21:04.720 に答える