我在使用以下代码阅读输入时有一个愚蠢的问题。
#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]=' ';
++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("%sn",query[i]);
i++;
}
return 0;
}
因此,我想输入任何数量的字符串,这些字符串由字母字符组成,这些字符沿单行沿单行分隔的任何数量的空格和选项卡组成,然后按Enter并给出eof Signal。(Linux终端下的Ctrl D通过线路输出字符串线。问题是当我输入3个字符串时,它会产生细分故障,但是当我输入或多或少的字符串时,没问题。有什么问题?请帮忙!
query[i]=NULL;
错误。 - BluePixy
@bluepixy:好接收。另外,在OP的逻辑中,应该在
之前进行重新分配(*query)[i][j]=' ';
腾出空间为空字符。 - M OEHM