gpt4 book ai didi

c - 不断出现段错误(核心已转储)

转载 作者:行者123 更新时间:2023-11-30 20:50:35 25 4
gpt4 key购买 nike

当我尝试编译它时,我不断遇到段错误。我需要检查偶数和奇数吗?我知道这意味着我试图获得我没有的内存,但我不确定我在哪里犯了错误。这也是 C。

#include<stdio.h>

int main()
{
char str[41], even[21], odd[21], *p, *pstr, *e, *o;

printf("Enter a string (40 characters maximum):");
scanf("%s", str);

*p=str[0];
*pstr=str[0];

for(*p=even[0]; *p != '\0';p++){
if((p-pstr) % 2 == 0){
*e=*p;
e++;
} else{
*o=*p;
o++;
}
}

*o = '\0';
*e = '\0';

printf("The even string is:%s", even);
printf("The odd string is:%s", odd);

return 0;
}

最佳答案

代码中的指针初始化存在一些困惑:

  • *p = str[0]str 中的第一个字符复制到 p 指向的地址,该地址未初始化,因此导致未定义的行为。
  • 您应该将 p 的值初始化为 str[0] 的地址:

    p = &str[0];

    可以简化为

    p = str;

这是更正后的版本:

#include <stdio.h>

int main(void) {
char str[41], even[21], odd[21], *p, *pstr, *e, *o;

printf("Enter a string (40 characters maximum):");
if (scanf("%40s", str) == 1) {
e = even;
o = odd;

for (p = pstr = str; *p != '\0'; p++) {
if ((p - pstr) % 2 == 0) {
*e = *p;
e++;
} else {
*o = *p;
o++;
}
}

*o = '\0';
*e = '\0';

printf("The even string is: %s\n", even);
printf("The odd string is: %s\n", odd);
}
return 0;
}

关于c - 不断出现段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43460633/

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