gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:51:56 24 4
gpt4 key购买 nike

我的问题是,这段代码只能处理很小的输入字符串

代码应该检查输入是否是回文。有两个选项,我在额外的函数中实现它们(当我注释掉函数时,也会出现此错误)

例如:输入“otto” - 可以“reliefpfeiler” - 没关系“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” --> 段错误

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;
}

我希望有人能帮助我:)

最佳答案

您的问题之一是 str 只是一个指针(就此而言尚未初始化),并且您尚未为其分配任何内存。请参阅:

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

fgets(str,50,stdin);

char* str 更改为 char str[50]。对 fgets 的调用将 50 个 char 存储到 str 指向的缓冲区指针中,没有为 str 分配内存所以你会出现段错误。

我们也没有您调用的函数的定义,这可能会出现更多问题。

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

关于C:大字符串输入 --> 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017501/

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