为什么我将两个字符而不是一个存储在数组中?

时间:2018-12-03 17:21:12

标签: c

我写了这个脚本:

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

int main(void)
{
    int k = 65;
    char key[1];
    printf("%s\n", key);
    key[0] = k;
    printf("%s\n", key);
}

第一个printf()没有提供预期的结果。但是第二个打印的是“ AA”而不是A。这是什么原因?我只希望打印A。谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

更改printf("%s\n", key); 到:

            printf("%c\n", *key);

仅打印字符

答案 1 :(得分:1)

%s格式说明符将打印一个字符串,该字符串是NUL终止的数组中的字符序列。您的key数组只有一个字符,没有NUL终止符,因此您会得到未定义的行为。

要使用%s合法打印字符串,您需要传递(指向)一个包含NUL终止序列的数组,您可以通过将其声明为char key[2];并将其设置为{{1 }}。或者,您可以使用key[1] = '\0'打印单个字符(在这种情况下,您需要传递字符而不是数组-例如%c

相关问题