| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 809 人关注过本帖
标题:char定义问题
只看楼主 加入收藏
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
char定义问题
char cString[30]   这段后面方框内是限制字数的意思吗?  在后面的输入中如果超过了30字符数还能运行吗?
2015-07-28 22:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这条语句是分配一个数组的空间,数组的元素是char类型,空间是30个元素。C/C++语言都不检查数组越界,超出空间边界,可以继续输入,但后续的结果是不可预测的。所谓不可预测,是有时会程序崩溃(看见那个典型的出错对话框),但有时又不会(此时意味着可能修改了某些内容然而你不知道并且暂时未发作),后者的危害性比前者大,最起码前者马上知道有问题需要去检查、去修改,后者却能让你以为程序过关其实却是不合格的。

授人以渔,不授人以鱼。
2015-07-28 22:47
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
收藏
得分:0 
回复 2楼 TonyDeng
那么你能告诉我  为什么C语言里输入输出函数 都要有个char先定义?
    char* Char="ILOVECHINA";    /*定义字符串指针变量*/

    puts("ILOVECHINA!");        /*输出字符串常量*/
这一段里面  为什么不直接puts  那样不是更方便些吗?
2015-07-28 22:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 3楼 q370380556
两个是等价的,在编译器编译之后的执行代码中,是一样的指令。

授人以渔,不授人以鱼。
2015-07-28 23:01
q370380556
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-7-28
收藏
得分:0 
回复 4楼 TonyDeng
就是不明白什么时候需要声明char
2015-07-28 23:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
声明和定义的时候,需要指明数据类型,此时需要写char。但"djsdhdf"这样的字面值,在语言内部已经被视为char数组(C的字符串其实就是char数组,没有内置的字符串数据类型),这样的常量字符串,是被编译在称为“静态只读存储区”中的,puts("abc")的编译结果,是puts(Char),Char就是指向这个存储空间的指针,与前面的定义一样,只不过你定义了一个叫Char的指针,它在栈上占用一个指针变量的空间,而后面的语句,是编译器直接把地址值送给puts()函数了,绕过了指针变量的消耗。

授人以渔,不授人以鱼。
2015-07-28 23:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
当你的Char指针要多次使用时,就需要,这样不需要反复写同样的字符串字面值。现在的编译器,多是优化编译器,像你这样的代码,若编译器发现Char指针只用了一次,极可能把这个指针删掉,而改为后面直接的形式。打开优化编译开关与否,会有不同的结果,所以我一向不建议依赖调试器,须知debug版和release版可能是完全不同的。

[ 本帖最后由 TonyDeng 于 2015-7-28 23:42 编辑 ]

授人以渔,不授人以鱼。
2015-07-28 23:37
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:10 
[]里面是数组的大小

不要不要的。。。
2015-07-29 11:06
快速回复:char定义问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.102060 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved