user-0 提问: 有关C语言从文件读取字符串存入到数组中，急求解答！！！

回复:
user: user-1
content: 楼主 你用16进制看一下你的文件最后是什么数据

user: user-1
content: 用0初始化 准确的说 应该是最后一个char name[50]没有用\0来结束 就把之后的0XCC都输出了

user: user-2
content: 其实： while（2==fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name)） { 。。。 } 就完了。

user: user-3
content: 请判断fscanf函数的返回值！

user: user-4
content: 你用的那个嵌套循环把次数翻了一倍，再往后读就越界了。 试试这样看看。 	if(file == NULL) 	{ 		printf("该文件不存在！"); 	} 	else 	{ 		for(int i = 0; i < ROW ; ++i)   			fscanf(file, "%d%s", &bench[i].count, bench[i].name); 		fclose(file); 	} 	for(int i = 0 ; i < ROW ; ++i) 		printf("%d    %s \n",bench[i].count, bench[i].name); 	system("pause");

user: user-5
content: 引用 20 楼 schlafenhamster 的回复:if（2==fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name)） {  }判断下数据是否成功读入。 你的数组是固定的长度，而文件里是否有足够的数据来填充数组呢？ 如果读入中途出错或者数据已经结束，读入是否应该终止？ 打印时应该以读入后的数组大小来做边界。如果数组并没有那么多数据呢？数组打印的值后面肯定是不正确的吗？

user: user-6
content: memset(bench,0,sizeof(bench));   可以处理掉后面的烫字

user: user-2
content: if（2==fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name)） {  }

user: user-7
content: 没有初始化造成的 打开文件之前加一句  memset(bench,0,sizeof(bench));   便可解决问题

user: user-8
content: 很明显是读文件读出错了!  fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name); 上面加两句 bench[i][j].count = 0; bench[i][j].name[0] = '\0';

user: user-9
content: 引用 3 楼 wangdahu888 的回复:很明显访问了栈访问越界了。栈的内容通常以0CCCCCCCCh来初始化，就那个 烫 字 三楼神人啊，这都被你发现了，应该得分！

user: user-10
content: 注意，fscanf函数在遇到文件EOF时会返回-1；因此可以将程序的原fscanf行改成:        int res = fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name);         if(res == -1) { break; } 搞定了的话 把分给我

user: user-0
content: 引用 14 楼 u011779875 的回复:[quote=引用 12 楼 maspacious 的回复:] [quote=引用 11 楼 u011779875 的回复:] [quote=引用 10 楼 maspacious 的回复:] [quote=引用 9 楼 u011779875 的回复:] 文件 有问题 txt 里面有非法字符可能 你删除出错那行 把前面的复制到下面  继续调试 没有出错的行啊。3312全部输出了都正确 只是后面多余了[/quote] #define ROW 3312  你看我的帖子了吗  你文件就3312行  你定义的是3312 我开始你就和你说了 你输出的时候 还是输出的3312  for(int i = 0 ; i < ROW ; ++i)         for(int j = 0; j < COL ; ++j)  你有那么多吗 读到那么多了吗 就输出[/quote] 你看我程序了么  是 二维的 3312行2列。正常输出不就是这样么[/quote]   fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name);   这个函数读取文本的时候开始的时候都是没一行有1个\n 但是读取到最后一行的时候直接就是-1了 所以 你要在读最后一行做一个处理[/quote]   问题已经解决了。不是这个问题。 我只需要一个一维数组 里面包含两个内容。二我申请了一个二维的。

user: user-10
content: 引用 12 楼 maspacious 的回复:[quote=引用 11 楼 u011779875 的回复:] [quote=引用 10 楼 maspacious 的回复:] [quote=引用 9 楼 u011779875 的回复:] 文件 有问题 txt 里面有非法字符可能 你删除出错那行 把前面的复制到下面  继续调试 没有出错的行啊。3312全部输出了都正确 只是后面多余了[/quote] #define ROW 3312  你看我的帖子了吗  你文件就3312行  你定义的是3312 我开始你就和你说了 你输出的时候 还是输出的3312  for(int i = 0 ; i < ROW ; ++i)         for(int j = 0; j < COL ; ++j)  你有那么多吗 读到那么多了吗 就输出[/quote] 你看我程序了么  是 二维的 3312行2列。正常输出不就是这样么[/quote]   fscanf(file, "%d%s", &bench[i][j].count, bench[i][j].name);   这个函数读取文本的时候开始的时候都是没一行有1个\n 但是读取到最后一行的时候直接就是-1了 所以 你要在读最后一行做一个处理

user: user-10
content: 最后一次读 没有/0 你要做特殊的处理  】我才看出问题所在

user: user-0
content: 引用 11 楼 u011779875 的回复:[quote=引用 10 楼 maspacious 的回复:] [quote=引用 9 楼 u011779875 的回复:] 文件 有问题 txt 里面有非法字符可能 你删除出错那行 把前面的复制到下面  继续调试 没有出错的行啊。3312全部输出了都正确 只是后面多余了[/quote] #define ROW 3312  你看我的帖子了吗  你文件就3312行  你定义的是3312 我开始你就和你说了 你输出的时候 还是输出的3312  for(int i = 0 ; i < ROW ; ++i)         for(int j = 0; j < COL ; ++j)  你有那么多吗 读到那么多了吗 就输出[/quote] 你看我程序了么  是 二维的 3312行2列。正常输出不就是这样么

user: user-10
content: 引用 10 楼 maspacious 的回复:[quote=引用 9 楼 u011779875 的回复:] 文件 有问题 txt 里面有非法字符可能 你删除出错那行 把前面的复制到下面  继续调试 没有出错的行啊。3312全部输出了都正确 只是后面多余了[/quote] #define ROW 3312  你看我的帖子了吗  你文件就3312行  你定义的是3312 我开始你就和你说了 你输出的时候 还是输出的3312  for(int i = 0 ; i < ROW ; ++i)         for(int j = 0; j < COL ; ++j)  你有那么多吗 读到那么多了吗 就输出

user: user-0
content: 引用 9 楼 u011779875 的回复:文件 有问题 txt 里面有非法字符可能 你删除出错那行 把前面的复制到下面  继续调试 没有出错的行啊。3312全部输出了都正确 只是后面多余了

user: user-10
content: 文件 有问题 txt 里面有非法字符可能 你删除出错那行 把前面的复制到下面  继续调试

user: user-10
content: 引用 7 楼 maspacious 的回复:[quote=引用 6 楼 wangdahu888 的回复:] [quote=引用 3 楼 wangdahu888 的回复:] 很明显访问了栈访问越界了。栈的内容通常以0CCCCCCCCh来初始化，就那个 烫 字 我说错了，应该是访问了未被写入内容的栈空间，栈的内容通常以0CCCCCCCCh来初始化，就那个 烫 字[/quote]  如何修改。。。。找不到地方啊[/quote] 我以前真的遇到过这个问题 只是脑袋忘记了 是哪了