【发布时间】:2015-06-14 05:22:40
【问题描述】:
我正在尝试将文件读入动态分配的二维数组,但我不断打印出同一行。我放入这段代码的文件是一个 .txt,有 1000 行。最后的打印是检查数组是否获取正确的数据。最后,我试图重新分配代码以适应放入数组的行数。谢谢 :)
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
int main(void)
{
char buffer[349];
char *del = "";
int i = 0;
int count = 0;
int len = 100;
int row = 10;
int max = 10;
char** d;
d = malloc(row * sizeof(char*));
for(i = 0; i < row; i++)
{
d[i] = malloc(349);
}
i = 0;
while (fgets(buffer, sizeof(buffer), stdin) != NULL)
{
d[i] = buffer;
i++;
if(i == max)
{
d = realloc(d, sizeof(d)*2);
for(i = max; i <= max*2; i++)
{
d[i] = malloc(349);
}
max = max * 2;
printf("reallocating to %d\n", max);
}
}
for(i = 0; i < 20; i++)
{
printf("%s\n", d[i]);
printf("%lu\n", sizeof(d[i]));
}
}
txt 文件上的示例行:
2152,1,MAIN,SOCW,6390,006,22913,IND - 独立研究,0,1,1,0,0,12:00 AM,12:00 AM,N,N,N,N, N,N,N,01-20-2015,05-08-2015
文件中大约有 1000 行这样的行。
【问题讨论】:
-
1)
d[i] = buffer;改为strcpy(d[i], buffer); -
2)
d = realloc(d, sizeof(d)*2);-->d = realloc(d, sizeof(*d)*max*2); -
3)
for(i = max; i <= max*2; i++)-->for(i = max; i < max*2; i++) -
4)
printf("%lu\n", sizeof(d[i]));-->printf("%lu\n", strlen(d[i])); -
5)这部分
i到其他变量for(int j = max; j < max*2; j++){ d[j] = malloc(349);}
标签: c arrays dynamic 2d allocation