我正在编写一个用户空间程序,我想向内核模块发送一个文本文件内容.文本文件不是很长,所以我不是逐行发送,而是将所有文本放在一个字符串中发送.

FILE *rules_text_file;
char *rules = (char *)malloc(sizeof(50*256*sizeof(char))); 
....
if (fgets(rules, 100, rules_text_file) == NULL) {
    return -1;
}
printf("%s\n",rules);  
          
fclose(rule_dev_file);
fclose(rules_text_file);
free(rules);
return 0;

我注意到fget在空格和换行处换行.有没有其他功能可以读取文本文件并将其保存为我可以使用的字符串?

文本文件len小于50*256个字符.

推荐答案

显然,您不是在考虑任何换行符或其他换行符,所以正如 comments 所说:

如果你不在乎台词,那就用fread()而不是fgets().

代码如下:

char *rules = malloc(sizeof(50*256*sizeof(char))); 
/* ... */
memset(rules, 0, 50 * 256);
errno = 0;
/* read one byte less to make string functions happy */
size_t len = fread(rules, 1, 50*256 - 1, rules_text_file)
if (errno) {
    return -1;
}

C++相关问答推荐

漏洞仅出现在FreeBSD上,但在Windows、Linux和MacOS上运行得非常好

如何将匿名VLA分配给指针?

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

在#include中使用C宏变量

为什么可以通过指向常量int的指针间接地改变整数的值?

我编译了一个新的c程序,并收到以下错误

在C++中头文件中声明外部 struct

ATmega328P EEPROM未写入

LONG_DOUBLE_T是否存在(标准C:C23)

这个计算C中阶乘的函数正确吗?

处理来自浏览器的HTTP请求

如何在C++中安全地进行浮点运算

C语言中MPI发送接收字符串时出现的分段错误

将回调/基于事件的C API转换为非回调API

我可以创建适用于不同endian的 colored颜色 struct 吗?

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

为什么GCC不能在 struct 初始值设定项中以sizeof作为条件的三进制中处理复合文字的编译时求值?

在git补丁中自动添加C的宏

如何确定 C 程序中的可用堆内存

定义 int a = 0, b = a++, c = a++;在 C 中定义了行为吗?