使用以下代码读取输入时,我遇到了一个愚蠢的问题。
#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;
}
所以,我想输入任意数量的字符串,这些字符串由任意数量的空格和标签沿一条线分隔,然后按回车键并给出EOF信号。(在linux终端下的CTRL + D。)然后,它应该逐行输出字符串。 问题是当我输入3个字符串时它会给出分段错误,但是当我输入更多或更少的字符串时没问题。 可能是什么问题? 请帮忙!
答案 0 :(得分:0)
query[i]=NULL;
错了。 - BLUEPIXY
@BLUEPIXY:好抓。此外,在OP的逻辑中,应该在
之前重新分配(*query)[i][j]='\0';
为null char腾出空间。 - M Oehm