如何显示字符数组?

时间:2016-10-10 18:47:51

标签: c arrays pointers

在下面的代码中,

#include<stdio.h>
int main(){
  char string[] = {1, 2, 3};
  char* my_pointer = string;
  printf("%c", *my_pointer);
}

我希望在屏幕上显示ASCII字符'1'

ASCII字符'1'49,二进制表示为00110001

2 个答案:

答案 0 :(得分:4)

初始化时需要给它字符:

char string[] = {'1', '2', '3', '\0'};

或者您可以使用字符串

进行初始化
char string[] = "123";

使用

等数字时
  char string[] = {1, 2, 3};

它将打印与数字1对应的ASCII字符(很可能不会产生任何输出)。

如果要使用数字进行初始化,则必须执行以下操作:

  char string[] = {49, 50, 51};

答案 1 :(得分:0)

你的行

char string[] = {1, 2, 3};

声明一个由三个整数文字初始化的三个char值的数组。要使用char literal初始化,请使用单引号运算符',如下所示。

char string[] = {'1', '2', '3', '\0'};

请注意,在初始化数组时,您需要像我上面所做的那样包含空终止符,否则您对printf的调用将导致未定义的行为。在您对上述答案之一的评论中,您要求

  

为什么我需要给'1'而不是1. C是一种松散类型的语言。   1必须是类型转换为'1',因为它是字符串是字符数组

请记住,引擎盖下的char只是数字的代表; 'character literal'语法只是语法糖,允许您以更加语义的方式创建字符常量。

char variable1 = 49;
char variable2 = '1';

在这种情况下,这两个语句完全相同。如果C应该按照你建议的方式进行投射,是应该将49转换为4,9还是字符串“49”?目前还不清楚。 C是一种懒惰的语言 - 它没有任何聪明的技巧来帮助你,因此当你将char设置为值49时,它将分配数值。