小白我在Linux下写的一个读取文件的程序,是把整个文件读入内存的,现在发现了一个不太懂的问题。
代码如下:
//全局字符串缓存区
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, 请问多出的那个字节,是算哪个的?
1
HxSeek OP 啊!难道Linux的文件末端即使什么都不输入,都添加一个\n? 如果我按了回车,就是2个\n?
|
3
zhjits 2015-03-28 19:07:48 +08:00
Linux 上面 \n 用于标识一行的结束,所以文本编辑器会自动在最后一行之后添加一个 \n。
Windows 上面 \n 表示两行之间的分隔,所以最后一行之后不需要 \n。 |
4
msg7086 2015-03-28 22:28:43 +08:00 via iPhone
你自己cat一下看尾巴上有没有换行符嘛
或者ll一下也行啊 |
5
ETiV 2015-03-28 23:34:50 +08:00
如果你装了 vim, 你可以用 xxd 命令来以 hex 编码看看那文件.
|
6
miterleo 2015-03-29 00:35:00 +08:00
|
7
ashong 2015-03-29 00:48:50 +08:00 via iPhone
把最后一个字节值打出来看看就知道原因了
|