阵列分段故障C.

时间:2015-10-24 10:07:21

标签: c segmentation-fault

首先,我对C不是很熟悉。

我需要处理数组以解决我需要解决的问题,我已设法将问题简化为:

#include <stdio.h>
#include <string.h>

char array[5] = {"hello"}

int main() {

printf(%s\n", array[0]);

return (0);
}

在这种情况下,我只是想打印'h',但我得到了分段错误。

2 个答案:

答案 0 :(得分:2)

您有许多错误需要修复,

printf(%s\n", array[0]);

在这里,您正在尝试打印char,尝试

printf("%c\n", array[0]);

您错过了;

char array[5] = {"hello"}
                         ^

在声明字符串文字时,您不需要{}

char array[] = "hello";

答案 1 :(得分:1)

首先让我们看看%s的作用 - 它希望它对应一个地址。它开始逐字节地从该地址读取,就像所有这些字节都是字符一样,并一直打印它们直到它找到空\0字符。

现在, char array[5] = {"hello"} 意味着array[0]是'h' - 这是正确的。但是错误的是你使用%s来打印它。因此,%s认为'h'是一个地址(确切地说'h'的ascii值作为地址)。我估计这是104。这可以是一个地址,但是你的正常程序无法访问(这里有太多细节),因此分段错误

因此,简而言之,使用%c来打印字符。

还有一件事:array[5]不足以保持“你好” - 因为它实际上是6个字符,第六个是终止'\ 0'字符,它会自动附加到c字符串。