小白我在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 把最后一个字节值打出来看看就知道原因了 |