关于char字符输出的问题?

char a='y';

printf("%c\n",a);

运行这一段输出是y,嗯这个没问题

但把y改成yes,输出的为什么是s

Artion_Walker
浏览 1855回答 2
2回答

onemoo

你是这样改的吗  char a = 'yes';   并且只改了这里吗?单引号括起来的应该表示一个字符,所以一般你应该在里面只放一个字母。但其实 C 语法允许在单引号内放一个以上字符,这样它表示一个 int 值。但如何确定它的值是标准未指定的(也就是由各个实现自己决定)。因为这是实现相关的,我只能根据你的结果进行推测:很有可能,你的编译器将 'yes' 这样的多字符写法实现为“把这个字符序列按 int 的大小截断”。那么这个 int 值的低位字节就是字符 's'。 而等于号右侧作为一个 int 值在为等于号左侧的 char 提供初值时也会截断,只取低地址位。所以 a 得到的是表示字符 's'的值。  后面 printf 就打印出 s。上述斜体内容如果看不懂也没关系。你只要知道单引号主要用于表示一个字符,别写 'yes' 这样的。  说明下:并不是说单引号内只能放一个,而是只能放“表示一个字符”的内容。比如可以用转义字符来表示一个字符,像是 '\n'  '\0' 之类的,这时引号内自然会有多个字。顺便说一下:如果想表示字符串,就要用双引号括起来,如 "yes"。  printf 打印字符串的格式化指示符是 %s,如 printf("%s", "yes");

qq_莫非

printf("%c\n",a);你把%c换成%s呢
打开App,查看更多内容
随时随地看视频慕课网APP