C:大字符串输入 - >分段错误

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)

我希望有人可以帮助我:)

Aus*_*oke 6

你的一个问题是它str只是一个指针(未初始化)并且你没有为它分配任何内存.看到:

char* str;
int erg;
int c;
char stroriginall[50];

fgets(str,50,stdin);
Run Code Online (Sandbox Code Playgroud)

更改char* strchar str[50].这个调用fgets将50 char秒存储到缓冲区指针中str,没有分配内存,str因此你会发生段错误.

我们也没有对你的调用函数的定义,因为可能存在更多问题.

您还应该在编译器上启用所有警告,以便在编译时向您指出这些问题(如果它还没有这样做).

  • @ user1030620我很惊讶它完全有效,行为完全*未定义*. (2认同)