C语言查漏补缺——单引号和双引号
发布时间:2022-11-21 12:43:51 所属栏目:Asp教程 来源:
导读: 一直对于单引号和双引号有些混淆,本节讨论一下单引号和双引号的问题。
一、基本知识
1、C语言中单引号用来表示字符字面量
2、C语言中双引号用来表示字符串字面量
比如:'a
一、基本知识
1、C语言中单引号用来表示字符字面量
2、C语言中双引号用来表示字符串字面量
比如:'a
一直对于单引号和双引号有些混淆,本节讨论一下单引号和双引号的问题。 一、基本知识 1、C语言中单引号用来表示字符字面量 2、C语言中双引号用来表示字符串字面量 比如:'a'表示字符字面量,在内存中占1个字节, 'a'+1表示的是'a'的ASCII码加1,结果为'b' "a"表示字符串字面量,在内存中占2个字节,其中,第一个字节是"a",第二个字节是结束符'\0',"a"+1表示的是进行指针运算,结果指向"a"结束符'\0'。 二、代码分析 下面存在这样一段代码 #include? int?main() { ????char*?p1?=??1?; ????char*?p2?=?'1'; ????char*?p3?=?"1"; ????printf("%s,?%s,?%s",?p1,?p2,?p3); ???? ????printf('\n'); ????printf("\n"); ???? ????return?0; } 那么这段代码是否合法呢? 在Linux下,编译运行后,结果如下 C语言查漏补缺——单引号和双引号 为什么会报段错误呢?下面我们进行分析。 首先,我们看 ????char*?p1?=??1?; ????char*?p2?=?'1'; ????char*?p3?=?"1"; char* 在是指针,根据指针的概念,对应的指针变量存储的应该是一个地址,那么上述代码的内存分布可以理解如下 C语言查漏补缺——单引号和双引号 也就是说,p1和p2是在内存的低地址处。这里有一点需要记住,程序的内存地址,必须要小于0x08048000,不然就会产生段错误。 三、扩展 #include? int?main() { ????char?c?=?"?"; ???? ????while(?(c?==?"\t")?||?(c?==?"?")?||?(c?==?"\n")?) 前后引号还是上下引号_英文直引号弯引号用法_asp单引号 ????{ ????????scanf("%c",?&c); ????} ???? ????return?0; } 这段程序,在Linux中运行结果如下 C语言查漏补缺——单引号和双引号 可以看到程序运行以后,直接就完了,并没有我们想象中的需要输入的情况。为什么会这样呢? 分析如下 char?c?=?"?"; 这段代码等同于 char?c?=?"string"; 1、编译后字符串"string"的内存地址被赋值给了变量c 2、内存地址占用4个字节,而变量c只占用1个字节 3、由于类型不同asp单引号,赋值后产生截断 因此,这里需要将所有的双引号改成单引号,就可以实现。 四、总结 1、单引号括起来的单个字符代表整数 2、双引号括起来的字符代表字符指针 3、C编译器接受字符和字符串的比较,无任何意义 4、C编译器允许字符串对字符变量赋值,只能得到错误 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐