nik*_*ter 2 c string segmentation-fault
我的问题是,这段代码只适用于微小的输入字符串
代码应该检查输入是否是Palindrom.并且有两个选项,我在额外的函数中实现它们(当我将函数注释掉时,这个错误也会出现)
例如:输入"otto" - 没关系"reliefpfeiler" - 没关系"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - >分段错误
int main(int argc, char **argv)
{
char* str;
int erg;
int c;
char stroriginall[50];
fgets(str,50,stdin);
str[strlen(str)-1]='\0';
if(strlen(str)>40)
{
printf("%s: Error, input must <=40!",argv[0]);
return 1;
}
strcpy(stroriginall,str);
while ((c=getopt(argc, argv, "si")) != -1)
{
switch(c)
{
case 's':
str=removeSpaces(str);
break;
case 'i':
toLowerCase(str);
break;
}
}
erg=checkPalindrom(str);
if(erg==0)
{
printf("%s ist ein Palindrom\n",stroriginall);
}
else
{
printf("%s ist kein Palindrom\n",stroriginall);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望有人可以帮助我:)
你的一个问题是它str只是一个指针(未初始化)并且你没有为它分配任何内存.看到:
char* str;
int erg;
int c;
char stroriginall[50];
fgets(str,50,stdin);
Run Code Online (Sandbox Code Playgroud)
更改char* str到char str[50].这个调用fgets将50 char秒存储到缓冲区指针中str,没有分配内存,str因此你会发生段错误.
我们也没有对你的调用函数的定义,因为可能存在更多问题.
您还应该在编译器上启用所有警告,以便在编译时向您指出这些问题(如果它还没有这样做).