关于 C 语言的一个文件字节问题

2015-03-28 16:50:49 +08:00
 HxSeek

小白我在Linux下写的一个读取文件的程序,是把整个文件读入内存的,现在发现了一个不太懂的问题。

代码如下:

include<stdio.h>

include<stdlib.h>

//全局字符串缓存区
char *g_pSourceFile;

int main(int argc, char *argv[])
{

//检查参数个数
if(argc < 2)
{
printf("没有指定文件\n");
return 0;
}

//为脚本创建一个文件指针
FILE * pSourceFile;

if(! (pSourceFile = fopen(argv[1], "rb")))
{
    printf("文件读写错误!\n");
    return 0;
}

//获取文件总长度(字节数)
fseek(pSourceFile, 0, SEEK_END);
int SourceSize = ftell(pSourceFile);
printf("%d\n\n", SourceSize);
fseek(pSourceFile, 0, SEEK_SET);

//创建一个足够大的字符串存入整个文件内容
g_pSourceFile = (char *)malloc(SourceSize);

char currChar;     //当前字符

for(int i=0; i<SourceSize; i++)
{
    currChar = fgetc(pSourceFile);
    printf("%s\n", currChar);
}

return 0;

}

当我创建了一个被读取的文件,里面的内容只有123的时候(不包含回车),SourceSize输出4,包含回车的时候输出5, 请问多出的那个字节,是算哪个的?

3110 次点击
所在节点    程序员
7 条回复
HxSeek
2015-03-28 16:56:26 +08:00
啊!难道Linux的文件末端即使什么都不输入,都添加一个\n? 如果我按了回车,就是2个\n?
ddaii
2015-03-28 17:15:53 +08:00
@HxSeek 是你的文本编辑器加的,和 Linux 没有关系。
zhjits
2015-03-28 19:07:48 +08:00
Linux 上面 \n 用于标识一行的结束,所以文本编辑器会自动在最后一行之后添加一个 \n。
Windows 上面 \n 表示两行之间的分隔,所以最后一行之后不需要 \n。
msg7086
2015-03-28 22:28:43 +08:00
你自己cat一下看尾巴上有没有换行符嘛
或者ll一下也行啊
ETiV
2015-03-28 23:34:50 +08:00
如果你装了 vim, 你可以用 xxd 命令来以 hex 编码看看那文件.
miterleo
2015-03-29 00:35:00 +08:00
可以用:
hexdump -C [文件名]
看一下就知道了,文件尾部被添加了一个0x0a,至于为什么,参见下面连接
http://www.zhihu.com/question/22808787
ashong
2015-03-29 00:48:50 +08:00
把最后一个字节值打出来看看就知道原因了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/179955

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX