gpt4 book ai didi

c - 标记化缓冲区段错误

转载 作者:行者123 更新时间:2023-11-30 18:39:05 26 4
gpt4 key购买 nike

所以我猜我在这里遗漏了一些相当简单的东西,但我正在尝试逐行读取文件,并在读取时标记缓冲区。我已经粘贴了我试图用我的代码做什么的基础知识。我从来没有遇到过 strtok 问题,所以我猜这与我正在使用的缓冲区有关。有没有朝着正确的方向插入?我读到 strtok 不是一个很好的选择,但它是我唯一熟悉的东西(我想我可以编写自己的函数)它每次都会按预期读取第一个 token 。在我尝试使用“strtok(NULL,””);”查找第二个标记之前,它不会出现段错误

我不知道为什么这被视为重复而被否决。是的,那里有一些答案可以告诉我想要做什么的基础知识,但我想理解问题,而不仅仅是剪切和粘贴。”我更想知道为什么会出现段错误以及为什么我的代码的行为与它一样。当我询问其他帖子中未直接指出的具体问题时,无需投反对票。

const char *file = "path/to/file/file.txt";
void tokenize();

//Eventually file will be command line opt
FILE *open_file(const char *file);

int main(int argc, char *argv[])
{
tokenize();
}

void tokenize()
{
FILE *fp;
fp = open_file(file);
char buffer[BUFSIZ];

while(fgets(buffer,BUFSIZ,fp) != NULL)
{
//puts("========================================");
//puts(buffer);
//puts("========================================");

char *data = strdup(buffer);
char *token;
token = strtok(data, " ");
//puts(token);
while(token != NULL)
{
token = strtok(NULL, " ");

puts("++++++++++++++++++++++++++++++++++++++++++++++");
puts(token);
puts("++++++++++++++++++++++++++++++++++++++++++++++");
}
}
fclose(fp)
}

FILE *open_file(const char *file)
{
FILE *fp;
fp = fopen(file, "r");

if(fp == NULL)
{
perror("Error opening file");
}
return fp;
}

最佳答案

您的while循环检查token不为NULL,但然后在使用它之前在循环的第一行修改它。第二次调用 strtok() 应该在循环的末尾:

    while(token != NULL)
{
puts("++++++++++++++++++++++++++++++++++++++++++++++");
puts(token);
puts("++++++++++++++++++++++++++++++++++++++++++++++");

token = strtok(NULL, " ");
}

另外,不要忘记在外部 while 循环底部进行 free(data) 操作。否则,就会出现内存泄漏。

关于c - 标记化缓冲区段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252988/

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