所以,我正在从事这个子手游戏。我在数组和指针方面遇到了一些麻烦。这就是我所拥有的:
char* getword(int index);
int main (void) {
char *secword = getword(1);
printf("%s ", *secword);
}
char *getword(int index)
{
char *words[8]= {'bye', 'hi','what', 'cat', 'dog',
'bird', 'air', 'water', 'fire'};
return words[index];
}
我不断收到分段错误(核心转储)错误。
你有四个重要的错误
您不能words
在getword()
函数外部使用,因为它已分配在函数的堆栈框架中。
因此,当函数返回时,将释放数组,从而发生未定义的行为。
您的数组不包含字符串,而是包含多字符内容。多字符常量是有效的,但是已定义实现,因此您不能在可移植程序中依赖它们。
因为未启用警告,所以代码会编译,然后,当您尝试访问位于这些值的地址以打印它们时,将定义依赖于多字符常量实现的整数值分配给数组的Poitner,然后进行未定义的行为发生。
printf()
期望char
每个"%s"
说明符*secword
都有一个指针,具有类型,char
所以这也是错误的,因为您没有启用编译器警告,所以它正在再次编译。
您正在用9
单词而不是初始化数组8
,这是编译器警告将报告的另一个问题。
您有2个选择
使函数words
静态getword()
const char *getword(int index);
int main (void)
{
char *secword = getword(1);
printf("%s\n", secword);
}
const char *getword(int index)
{
static const char *words[9] = {"bye", "hi", "what", "cat", "dog",
"bird", "air", "water", "fire"
};
return words[index];
}
words
在main中声明,然后传递给getword()
const char *getword(int index, const char *words[]);
int main (void)
{
const char *words[9] = {"bye", "hi", "what", "cat", "dog",
"bird", "air", "water", "fire"
};
char *secword = getword(1, words);
printf("%s\n", secword);
}
const char *getword(int index, const char *words[])
{
return words[index];
}
我已经写了一段时间的c程序,并且我使用编译器可以给出的尽可能多的警告,如果我是一位学习c的新程序员,我会尽可能地启用更多警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句