今日、私はchar **
オブジェクトがメモリまたはバイナリ ファイルにどのように保存されるかを尋ねました。次のコード スニペットでテストしました。
char **array = (char *)malloc(3 * sizeof(char *));
array[0] = "Foo"; // Length: 3
array[1] = "Long string"; // Length: 11
array[2] = "Bar"; // Length: 3 => Full length: 17
int length = 17;
この配列をファイルに書き込みます。
FILE *file = fopen(...);
fwrite(array, length, 1, file);
fclose(file);
すばらしいことに、次のコードを使用してファイルからこの配列を再度読み取ると、17 バイト以上を保存することなく、文字列の長さが正常に読み取られます。
FILE *file = fopen(...);
int length = 17;
char **array = (char *)malloc(length);
int index = 0;
int parsedLength = 0;
while (parsedLength < length)
{
char *string = array[index];
int stringLength = strlen(string);
printf("%i: \"%s\" (%i)\n", index, string, stringLength);
parsedLength += stringLength;
++index;
}
次のような出力が得られます。
0: "Foo" (3)
1: "Long string" (11)
2: "Bar" (3)
コンパイラは、配列内の各文字列の長さをどのように認識しますか?