c - 从文件中读取配置

标签 c string io fopen

所以我试图从一个文本文件中读取并将其放入一个变量中

在文本文件中有

NAME= Bame
GAME= Fame

我听说过 strsep/strtok,但我仍然遇到问题,使用这段代码我得到了 Segmentation Fault 11

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

int main() {
char *token;
char *string;
char *tofree;
FILE *fp;
const char *file = "/tmp/test.txt"; 
fp = fopen(file, "r");
while(!feof(fp)) {
fgets(string, sizeof(string), fp);
token = strsep(&string, ",");
printf("%s", string);
}
fclose(fp);
exit(0);    
}

最佳答案

主要问题出在这一行:

fgets(string, sizeof(string), fp);

第二个参数应该是'Maximum number of characters to be copied into str' .在调用此函数之前,您应该已将 string 初始化为某些内容。如果您查看我给出的链接中的示例,将 string 更改为字符数组将帮助您更进一步。

char string[100];
....
fgets(string, 100, fp);    

之前您传递的是 sizeof(string),但是由于字符串实际上是指针类型,因此您传递的是指针的大小(以字节为单位)(4 或 8,具体取决于平台)。 string 也是一个未分配的指针,因此 fgets 可能会写入一个随机内存地址。

关于c - 从文件中读取配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143652/

相关文章:

c - 在c编程中如何移动数组中的第一个元素并将其移动到最后一个元素?

java - 如何将首字母缩写词与其在字符串中的含义分开

c++ - 构建一个 char* vector

haskell - 使用 Monadic QuickCheck 测试 IO 操作

c - 关于 linux 模块 printk

c - 读取文件并存储到字符串中

java - 如何在java中删除带有特殊字符的单词边界字符串

arrays - 将文件中的行复制到 char *array[]?

python - 如何搜索并用封闭的字符替换文本文件?

c - execvp 新进程镜像并退出