无法在c中读取数组的第一个字符

can't read first character of array in c

我试图在 c 中按数字读取字符数组的字符。我已经剥离了程序以隔离问题。我知道这是关于我对数组和内存如何工作的误解,我已经准备好被称为无知,但我想知道我在这里误解了什么。这是我拥有的:

#include <stdio.h>

int main(int argc, char **argv) {
    char buffer[] = "stuff";
    printf("buffer is %s\n", buffer);
    printf("first character of buffer is %s", (char)buffer[0]);

    return 0;
}

如果只想打印一个字符,请使用 %c 格式。

printf("first character of buffer is %c\n", (char)buffer[0]);

您必须编写正确的格式说明符。现在你使用 %s ...会发生什么? 它查找以 null 结尾的字符串。但它没有找到一个。所以它根本不能在输出中放任何东西。而已。 请改用 %c

在 C 中,字符和字符串之间有很大的区别。 一个字符只是 256 个不同选项范围内的一个数字。 字符串本身并不是真正的类型,它只是一个字符数组(在 C 中,它被简单地评估为指向字符串第一个字符的指针)。

现在,当您键入 buffer[0] 时,会将其计算为字符串开头的值(数组中的第一个值)。实际上,这是 char 类型(因此您不需要 (char) 强制转换,因为在您的代码中这不会执行任何操作)。

您需要告诉 printf() 如何评估您提供的输入。 %s 用于字符串(字符数组)。但请注意并记住 buffer[0] 不是字符数组,而是 a 字符。 所以你实际上想使用 %c,而不是 %s。这告诉 printf() 将参数评估为 char 类型。 您的代码当前所做的是获取值 buffer[0](这只是一个数字)并将其视为指向内存中保存字符串的位置的指针,然后 printf() 尝试打印该字符串。但是这个内存位置根本就是无效的。这不是您之前访问过的位置。

你想要的结论:

printf("first character of buffer is %c", (char)buffer[0]);

或更简单:

printf("first character of buffer is %c", buffer[0]);

有关 printf() 函数的其他说明符,请查看此处: http://www.tutorialspoint.com/c_standard_library/c_function_printf.htm