用C打印字符数组 - 只有最后一个字母?

时间:2013-12-20 13:55:29

标签: c

int main (){

    char array[2] = {'hola', 'adios'};  
    int i = 0;

    while (i<3){
        printf("%c", array[i]);
        i++;
    }

    return 0;
}

我不知道为什么输出是每个单词的最后一个字母,如下所示:as:)

它看起来像一个笑脸,wtf?

我只是想输出hola adios

3 个答案:

答案 0 :(得分:4)

你需要字符串,而不是字符。 hola是一个字符串,而不是char。字符串位于""中但不在''中。所以你需要

const char* array[2] = { "hola", "adios" };  

现在,这个数组有2个元素,所以循环遍历它们

while (i<2){ /* also NOTE: 2 elements in the array */
    printf("%s", array[i]); /* note the "%s", it's not "%c" */
    i++;
}

我会改用for循环。

为什么没有编译时错误?请参阅What do single quotes do in C++ when used on multiple characters? - C中的内容类似。

答案 1 :(得分:2)

您正在创建2个单个字符元素的数组。声明两个字符串的数组,并使用双引号来声明字符串,而不是字符:

char* array[2] = {"hola", "adios"}; 

此外,在printf中,使用%s打印字符串。 i应在{0, 1}范围内 - 不包括2

答案 2 :(得分:1)

char array[2] = {'hola', 'adios'};  

这是无效的。您位于“未定义的行为”区域中。

您需要char**char[] []并使用""代替''作为字符串。