gpt4 book ai didi

c - 如何使用 C 中的 stdio.h 逐字读取文件?

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

我是 C 语言新手,如果没有段错误,我无法完全理解它。

到目前为止,这是我的想法:

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

char *nextWord(FILE *stream) {
char *word;
char c;

while ( (c = (char)fgetc(stream)) != ' ' && c != '\n' && c != '\0') {
strcat(word, &c);
}

return word;
}

int main() {
FILE *f;
f = fopen("testppm.ppm", "r");
char *word;
word = nextWord(f);
printf("%s",word);
}

最佳答案

在您的 nextWord 函数中,您永远不会初始化局部变量 word 来指向任何内容,因此当您尝试使用 写入指向的内存时strcat,你会得到一个段错误。

您需要分配内存来存储您要读取的单词。问题是,您不知道该单词有多大,因此您不知道要分配多少空间。有多种可能的方法:

  • 在堆栈上使用一个(大)固定大小的缓冲区来保存您读取的单词,然后在返回它时将其复制到适当大小的 malloc 区域。如果遇到对于固定大小缓冲区来说太大的单词,将会出现问题。

  • 分配一个小块来读取单词,并跟踪读取字符时使用了多少。当 block 已满时,重新分配它以使其更大。

关于c - 如何使用 C 中的 stdio.h 逐字读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213014/

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