gpt4 book ai didi

c - strtok() 空字符串输入时出现段错误

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

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

#define MAX_INPUT_LENGTH 1024

char *readline(FILE* fp, int max_length)
{
//The size is extended by the input with the value of the provisional
char *str;
int ch;
int len = 0;
int current_max = max_length;

str = (char*)malloc(sizeof(char)*current_max);
if(!str)
return str;

while((ch = fgetc(fp))!=EOF)
{
/* Separate newline handling from EOF handling */
if((char)ch == '\n')
{
str[len] = '\0';
return str;
}
str[len++] = ch;

if(len == current_max)
{
current_max = current_max + max_length;
str = realloc(str, sizeof(char)*current_max);
if(!str)
return str;
}
}
str[len] = '\0';

return str;
}


int main(void)
{
char *input, *token;

input = readline(stdin, MAX_INPUT_LENGTH);

printf("BEFORE\n");
token = strtok(input, " "); //Segmentation Fault Here
printf("AFTER"); //control never reaches here on " " or "\n" input.
}

在上面的代码片段中,我尝试将空白字符上的字符串标记为分隔符。每当我以换行符(按 ENTER)或空格序列作为输入时,strtok() 都会调用段错误。据我了解,它应该返回 NULL ,我应该稍后在健全性检查中处理它,但这并没有真正发生。

请帮助我,我在这里缺少什么?

最佳答案

您对故障发生位置的分析不正确

printf("AFTER"); //control never reaches here on " " or "\n" input.

事实上,控制确实到达了那里。您只是看不到“AFTER”消息,因为那里没有换行符或刷新。将代码更改为以下内容,谜团就会消失:

printf("AFTER\n");

我敢打赌,您无法使用 MCVE 复制该错误,因为它确实到达了 main 的末尾,这会刷新输出。你忘记了 MCVE 中的“V”。您需要验证它是否复制了问题。

关于c - strtok() 空字符串输入时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416585/

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