我正在寻找跨平台(Windows + Linux)解决方案将整个文件的内容读取到char *
。将文件的全部内容读取到c char *,包括新行
这是我现在得到:
FILE *stream;
char *contents;
fileSize = 0;
//Open the stream
stream = fopen(argv[1], "r");
//Steak to the end of the file to determine the file size
fseek(stream, 0L, SEEK_END);
fileSize = ftell(stream);
fseek(stream, 0L, SEEK_SET);
//Allocate enough memory (should I add 1 for the \0?)
contents = (char *)malloc(fileSize);
//Read the file
fscanf(stream, "%s", contents);
//Print it again for debugging
printf("Read %s\n", contents);
不幸的是这将只打印文件中的第一行,所以我假设的fscanf停在第一个换行符。不过,我想阅读整个文件,包括并保留新的行字符。我宁愿不使用while循环并重新分配手动构造整个字符串,我的意思是必须有一个更简单的方法?
完美地工作,请注意,由于您已经拥有fileSize,因此您不需要size_t大小。接受最清楚的解释! – 2012-08-03 10:29:31
你确实需要size_t的大小,因为你不需要读取你询问的任何数量的字节(无论什么原因)。并且你的分配的缓冲区将不需要除了读满零之外的任何东西......并且我们真的不想打印垃圾:它在Windows上结束很糟糕,并且可以在UNIX上对终端执行讨厌的事情。 – Senna 2012-08-03 10:33:19
啊我不知道,我修改了我的代码。 – 2012-08-03 10:35:47