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

时间:2016-09-11 15:24:16

标签: c arrays format-specifiers

我试图用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;
}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

在C中,字符和字符串之间存在很大差异。 字符只是256个不同选项范围内的数字。 字符串实际上不是它自己的一种类型,它只是一个字符数组(在C中,它简单地被评估为指向字符串第一个字符的指针)。

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

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

总之,你想要:

user_obj.howl_set.all()

甚至更简单:

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

对于printf()函数的其他说明符,请看这里: http://www.tutorialspoint.com/c_standard_library/c_function_printf.htm

答案 2 :(得分:0)

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

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