前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言陷阱「词法陷阱 之字符与字符串」

C语言陷阱「词法陷阱 之字符与字符串」

作者头像
诸葛青云
修改2018-08-29 13:23:21
6320
修改2018-08-29 13:23:21
举报
文章被收录于专栏:诸葛青云的专栏

C语言陷阱【词法陷阱 之字符与字符串】

 字符与字符串

C语言中的单引号' ',与双引号" ",含义不同。

用单引号引起的一个字符实际上表示一个整数,该整数值为该字符在编译器采用的字符集中的序列值。所以,对于采用ASCLL字符集的编译器,'a'对应的整数值为97(十进制)或0141(八进制)。如:

#include

#include

#include

int main()

{

int a=0;

Int b=0;

char p='a';

char s[20];

a=p;

b=p+1;

itoa(a, s, 2);

printf("'a'二进制 --> %s ", s);

printf("'a'八进制 --> %o ", a);

printf("'a'十进制 --> %d ", a);

printf("'a'+1十进制 --> %d ", b);

}

该程序输出为:

用双引号引起的字符串,代表的是一个指向无名字符数组的起始字符的指针,该数字符数组的内容为,双引号之间的字符加一个二进制值为0的字符('')。

如:char * p="abcde";

与 char p[ ]={'a','b','c','d','e',''};

是等效的;

小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:487875004适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程

因为用单引号括起来的一个字符代表一个整数,而用双引号括起来的一个字符代表一个指针,如果两者混用,那么编译器的类型检查功能会检查到这样的错误。如:

Char * p1='u';

在编译时会报错,因为'u'代表一个整数值,并不是一个指针。

然而某些编译器对函数的参数并不进行类型检查,特别是printf函数的参数类型。因此如果把printf(''hello world"),误写为printf('hello world'),则会产生难以预料的错误!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档