你好,我是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;
}
有几个错误:
-
这宣言:
char Hero1 = "Batman";
无效,这就是区段错误的原因。这是因为
Hero1
只能保存一个单字节字符。因此,不能将整个字符数组赋值给它。 -
本行:
printf("%s's favorite hero is %s.n", Kid1, Hero1); ^^ ^^^^^
点
%s
要求char*
或char[]
的类型。不过,一旦第一个问题解决了,这个问题就可以解决了。
在此之后,您将不会遇到段错误。
我同意Rohan的观点。
编译器没有警告你这种可能性也是很奇怪的。GCC 9.3.0默认是这样做的。但是,如果你一直坚持使用核心转储,你可以使用gdb,它将在你的未来非常有用:)