首先,我对C不是很熟悉。
我需要处理数组以解决我需要解决的问题,我已设法将问题简化为:
#include <stdio.h>
#include <string.h>
char array[5] = {"hello"}
int main() {
printf(%s\n", array[0]);
return (0);
}
在这种情况下,我只是想打印'h',但我得到了分段错误。
答案 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字符串。