我想把文件的全部内容写入缓冲区.该文件实际上只包含一个字符串,我需要将其与字符串进行比较.

哪一个是最有效的选项,即使在linux上也是可移植的.

环境:windows

推荐答案

Linux和Windows之间的可移植性是一个令人头疼的问题,因为Linux是一个符合POSIX的系统,通常有一个适合C的高质量工具链,而Windows甚至没有在C标准库中提供很多函数.

然而,如果你想坚持标准,你可以这样写:

#include <stdio.h>
#include <stdlib.h>

FILE *f = fopen("textfile.txt", "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);  /* same as rewind(f); */

char *string = malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);

string[fsize] = 0;

在这里,string将包含文本文件的内容,它是一个正确以0结尾的C字符串.这段代码只是标准的C,它不是特定于POSIX的(尽管它不能保证它能在Windows上工作/编译……)

C++相关问答推荐

char为16位且Short也为16位的c环境合法吗

从STdin读写超过4096个字节

返回一个包含数组的 struct

我应该如何解决我自己为iOS编译的xmlsec1库的问题?转换Ctx.first在xmlSecTransformCtxPrepare()之后为空

ARM64 ASIMD固有的加载uint8_t* 到uint16x8(x3)?

如何在C中通过套接字自定义数据类型读取原始变量?

GCC不顾-fno-Builtin-SINCOS旗帜向SINCOS发出呼唤

函数的限制限定指针参数允许优化调用方函数吗?

什么是.c.h文件?

如何用c语言修改shadow文件hash部分(编程)?

如何在GET_STRING输入后对少数几个特定字符串进行C判断?

按长度对argv中的单词进行排序

为什么realloc函数在此代码中修改变量?

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

无法识别C编程语言的语法,如书中所示

在C中使用字符串时是否不需要内存分配?

%g浮点表示的最大字符串长度是多少?

将指针的地址加载到寄存器内联拇指组件中

获取 struct 中匿名 struct 的大小

C23 中是否有 __attribute__((nonnull)) 的等效项?