天下之奇:程序一

lyzcom 2001-12-17 08:35:27
我输入一个文本,一共4行,每行100个字符,然后用如下代码读出显示;
char line[4][100];
for(i = 0; i < 4; i ++)
{
fscanf(fp, "%s\n", line[i]);
//printf("%s\n", line[i]);
}
for(j = 0; j < 4; j ++)
{
printf("%s\n", line[j]);
}
显示结果是每一行又被程序自动换了一行

0000000000000000000000000000000000000000000000000000000000000000000000
//假设这是100个0
0000000000000000000000000000000000000000000000000000000000000000000000
...........................

现在我将程序改写:
char line[4][100];
for(i = 0; i < 4; i ++)
{
fscanf(fp, "%s\n", line[i]);
printf("%s\n", line[i]);
}/*
for(j = 0; j < 4; j ++)
{
printf("%s\n", line[j]);
}*/
输出结果是:
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
....................
中间没有被自动换一行

如果将第一段的char line[4][100]改为char line[4][101],中间也不会被自动换一行。请问大虾:这是咱回事啊?我头都快炸了!
...全文
53 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
风扬絮 2001-12-17
  • 打赏
  • 举报
回复
C语言中的字符串末尾有隐含字符“\0”,所以当你读入100个字符时会导致字符串超界,可能不会引起编译器出错,程序有时也能运行,但结果不正常;而且在文本文件中每行结尾都有两个不可见字符“\r\n”,实际一行长度为102,文件读取是以字节为单位,字符串读入以一个非字符的空白字符作为结尾。
你所出现的情况就是前一次循环读数时只能读取101字符,而在第二次循环时读入的是一个单字符‘\n’所致。实际情况可以通过DEBUG监视。
kingfish 2001-12-17
  • 打赏
  • 举报
回复
你数组开大点不行吗?

另外,读一行
fgets(buf,sizeof(buf)-1,fp);

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧