【发布时间】:2017-04-10 02:11:56
【问题描述】:
我想将字符串数组写入文件。现在,我先写数组中字符串的数量,然后使用以下代码写数组:
int rows = 3;
char **c = calloc (rows,sizeof(char*));
c[0] = "cat\0";
c[1] = "dog\0";
c[2] = "mouse\0";
FILE * f = fopen("test", "w");
if (f) {
fwrite(&rows, sizeof(int), 1, f);
fwrite(c, sizeof(char*), rows, f);
}
fclose(f);
当我读回数据时,我得到一个空字符**。这是我的代码:
FILE * f = fopen("test", "r");
if (f) {
int num = -99;
fread(&num, sizeof(int), 1, f);
char** buff = malloc(num*sizeof(char*));
fread(buff, sizeof(char), num, f);
buff[num] = 0x00;
for(int i = 0; i < num; i++) {
printf("%s ", buff[i]);
}
printf("\n");
}
【问题讨论】:
-
你写/读一个指针数组。这几乎不是一个好主意。
-
@Olaf 我是否应该单独编写每个字符串而不是数组?
-
您没有为输入端的每个字符串分配空间。您没有在输出端正确编写它们。您需要分别编写每个字符串。在尝试读取数据之前,您应该使用外部工具(例如
od或xxd或其他一些数据转储程序)检查文件的内容。 -
@JonathanLeffler 有没有办法单独编写一个数组而不是每个字符串?
-
您必须将字符串存储在连续内存中,并在单个操作中写入连续内存的相关部分。您还需要知道该空间有多长。这是可以做到的,但这是一项适度的艰苦工作。