分段核心转储,来自一个新手



你好,我是C编程的新手,我遇到了这个问题这是这个项目的问题让我抓狂的(细分核心转储),我不知道它是否是我的电脑还是程序出了问题我需要帮助,我将非常感谢你的帮助谢谢。这是程序

#include <stdio.h>
#include <string.h>
// Learning Arrays
// new filename Arrays
// by Pedro Menocal Ayon
// This program pairs three kids with their favorite superhero

int main(){
char Kid1[7];
// Kid1 can hold an 11-character name
// Kid2 will be 7 characters (Maddie plus null
char Kid2[] = "Maddie";
// Kid3 is also 7 characters, but specifically defined
char Kid3[7] = "Andrew";
// Hero1 will be 7 characters (adding null 0!)
char Hero1 = "Batman";
// Hero2 will have extra room just in case
char Hero2[34] = "Spiderman";
char Hero3[25];
Kid1[0] = 'K'; // Kid1 is being defined character-by-character
Kid1[1] = 'a';
Kid1[2] = 't';
Kid1[3] = 'i';
Kid1[4] = 'e';
Kid1[5] = ''; // Never forget the null 0 so C knows when the 
string ends
strcpy(Hero3, "The Incredible Hulk");
printf("%s's favorite hero is %s.n", Kid1, Hero1);
printf("%s's favorite hero is %s.n", Kid2, Hero2);
printf("%s's favorite hero is %s.n", Kid3, Hero3);


return 0;
}

有几个错误:

  1. 这宣言:

    char Hero1 = "Batman";
    

    无效,这就是区段错误的原因。这是因为Hero1只能保存一个单字节字符。因此,不能将整个字符数组赋值给它。

  2. 本行:

    printf("%s's favorite hero is %s.n", Kid1, Hero1);
    ^^            ^^^^^
    

    %s要求char*char[]的类型。不过,一旦第一个问题解决了,这个问题就可以解决了。

在此之后,您将不会遇到段错误。

我同意Rohan的观点。

编译器没有警告你这种可能性也是很奇怪的。GCC 9.3.0默认是这样做的。但是,如果你一直坚持使用核心转储,你可以使用gdb,它将在你的未来非常有用:)

相关内容

最新更新