gpt4 book ai didi

C++ 文件输入/输出

转载 作者:行者123 更新时间:2023-11-30 02:11:50 25 4
gpt4 key购买 nike

我正在尝试使用 fgets 和 sscanf 从文件中读取。在我的文件中,我希望将 while 的每一行都放入 vector 中。到目前为止,我有以下内容:

FILE *fp;
fp = fopen(filename, "r");
if(!fp)
{
fprintf(stderr, "Unable to open file %s\n", filename);
return 0;
}
// Read file
int line_count = 0;
char buffer[1024];
while(fgets(buffer, 1023, fp))
{
// Increment line counter
line_count++;

char *bufferp = buffer;

...

while(*bufferp != '\n')
{
char *tmp;
if(sscanf(bufferp, "%c", tmp) != 1)
{
fprintf(stderr, "Syntax error reading axiom on "
"line %d in file %s\n", line_count, filename);
return 0;
}

axiom.push_back(tmp);
printf("put %s in axiom vector\n", axiom[axiom.size()-1]);

// increment buffer pointer
bufferp++;
}
}

我的公理 vector 定义为 vector<char *> axiom; .当我运行我的程序时,出现段错误。当我执行 sscanf 时会发生这种情况.对我做错了什么有什么建议吗?

最佳答案

tmp 是指针而不是数组,因此读取它会导致缓冲区溢出。

首先,您应该将 tmp 的 decleration 更改为:

  char *tmp = malloc(SOME_MAXIMUM_SIZE * sizeof(char));

然后你应该记得在完成后释放 axioms 中的所有指针。

关于C++ 文件输入/输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com