gpt4 book ai didi

c - 使用 getchar() 读取输入时出现段错误

转载 作者:行者123 更新时间:2023-11-30 17:40:59 27 4
gpt4 key购买 nike

我在使用以下代码读取输入时遇到一个愚蠢的问题。

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


void read(char*** query)
{
*query = (char**) malloc ( sizeof(char*) );

int f=0;
int i=0,j=0,c;

while((c=getchar())!=EOF)
{
if(!isalpha(c))
continue;

if(f==1)
*query=(char**) realloc(*query,(i+1)*sizeof(char*));

(*query)[i]=(char*) malloc(sizeof(char));
(*query)[i][j]=tolower(c);
j++;

while( (c=getchar())!=EOF&&c!=' '&&c!='\t'&&c!='\n' )
{

(*query)[i]=(char*) realloc((*query)[i],(j+1)*sizeof(char));

(*query)[i][j]=tolower(c);
++j;
}

(*query)[i][j]='\0';

++i;
f=1;
j=0;

if(c==EOF)
{
*query=(char**) realloc(*query,(i+1)*sizeof(char*));
query[i]=NULL;
return;
}
}


*query=(char**) realloc(*query,(i+1)*sizeof(char*));
query[i]=NULL;

}

int main()
{

char** query;
int i=0;
read(&query);

while(query[i]!=NULL)
{
printf("%s\n",query[i]);
i++;
}

return 0;
}

所以,我想在一行中输入任意数量的由字母字符组成的字符串,并用任意数量的空格和制表符分隔,然后按 Enter 并给出 EOF 信号。(Linux 终端下的 CTRL+D 。)然后,它应该逐行输出字符串。问题是当我输入 3 个字符串时它会出现段错误,但是当我输入更多或更少的字符串时则没有问题。可能是什么问题?请帮忙!

最佳答案

query[i]=NULL; 错误。 –BLUEPIXY

@BLUEPIXY:很好。另外,在OP的逻辑中,之前应该有一个重新分配

(*query)[i][j]='\0';

为空字符腾出空间。 ——M·奥姆

关于c - 使用 getchar() 读取输入时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310824/

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