无法在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
我试图在 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