搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ char定义问题
标题:
char定义问题
只看楼主
q370380556
等 级:
新手上路
帖 子:8
专家分:0
注 册:2015-7-28
结帖率:
0
楼主
已结贴
√
问题点数:20 回复次数:7
char定义问题
char cString[30] 这段后面方框内是限制字数的意思吗? 在后面的输入中如果超过了30字符数还能运行吗?
2015-07-28 22:32
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
2
楼
得分:0
这条语句是分配一个数组的空间,数组的元素是char类型,空间是30个元素。C/C++语言都不检查数组越界,超出空间边界,可以继续输入,但后续的结果是不可预测的。所谓不可预测,是有时会程序崩溃(看见那个典型的出错对话框),但有时又不会(此时意味着可能修改了某些内容然而你不知道并且暂时未发作),后者的危害性比前者大,最起码前者马上知道有问题需要去检查、去修改,后者却能让你以为程序过关其实却是不合格的。
授人以渔,不授人以鱼。
2015-07-28 22:47
q370380556
等 级:
新手上路
帖 子:8
专家分:0
注 册:2015-7-28
第
3
楼
得分:0
回复 2楼 TonyDeng
那么你能告诉我 为什么C语言里输入输出函数 都要有个char先定义?
像 char* Char="ILOVECHINA"; /*定义字符串指针变量*/
puts("ILOVECHINA!"); /*输出字符串常量*/
这一段里面 为什么不直接puts 那样不是更方便些吗?
2015-07-28 22:54
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
4
楼
得分:0
回复 3楼 q370380556
两个是等价的,在编译器编译之后的执行代码中,是一样的指令。
授人以渔,不授人以鱼。
2015-07-28 23:01
q370380556
等 级:
新手上路
帖 子:8
专家分:0
注 册:2015-7-28
第
5
楼
得分:0
回复 4楼 TonyDeng
就是不明白什么时候需要声明char
2015-07-28 23:21
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
6
楼
得分:0
声明和定义的时候,需要指明数据类型,此时需要写char。但"djsdhdf"这样的字面值,在语言内部已经被视为char数组(C的字符串其实就是char数组,没有内置的字符串数据类型),这样的常量字符串,是被编译在称为“静态只读存储区”中的,puts("abc")的编译结果,是puts(Char),Char就是指向这个存储空间的指针,与前面的定义一样,只不过你定义了一个叫Char的指针,它在栈上占用一个指针变量的空间,而后面的语句,是编译器直接把地址值送给puts()函数了,绕过了指针变量的消耗。
授人以渔,不授人以鱼。
2015-07-28 23:29
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
7
楼
得分:0
当你的Char指针要多次使用时,就需要,这样不需要反复写同样的字符串字面值。现在的编译器,多是优化编译器,像你这样的代码,若编译器发现Char指针只用了一次,极可能把这个指针删掉,而改为后面直接的形式。打开优化编译开关与否,会有不同的结果,所以我一向不建议依赖调试器,须知debug版和release版可能是完全不同的。
[
本帖最后由 TonyDeng 于 2015-7-28 23:42 编辑
]
授人以渔,不授人以鱼。
2015-07-28 23:37
露营地
来 自:湛江
等 级:
论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
第
8
楼
得分:10
[]里面是数组的大小
不要不要的。。。
2015-07-29 11:06
8
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-455872-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.437182 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved