今天,我問我,如何char **
對象保存在內存或二進制文件。我測試了用下面的代碼片段:如何保存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)
如何編譯器知道,在陣列中多久每個字符串是什麼?
您的程序不可能產生這些結果,因爲字符串從未寫入文件。哎呀,你發佈的代碼甚至沒有從文件中讀取。所以這是一個巨魔崗位。 –
'char **'不是一個對象,它是一個指針。字節保存在文件中。 –
下一次你在SO提問時,**發佈你運行的實際代碼**,不要從內存中重建它,或者用一堆橢圓編輯它。這對於那些對C很少理解並且傾向於有各種他們沒有意識到的錯誤想法是錯誤的排名初學者來說尤其重要。 –