今天,我问我,如何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很少理解并且倾向于有各种他们没有意识到的错误想法是错误的排名初学者来说尤其重要。 –