| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1927 人关注过本帖
标题:帮忙看看哪里出问题了吧
只看楼主 加入收藏
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 20楼 TonyDeng
哦,这个我已经改了。不过好像改没改都不影响结果
2013-03-17 23:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用我这个不用初始化,而且你这种死循环20次的做法是错误的代码写法,首先20是魔数,不应该出现在代码中,其次这是不必要地做多了事,字符串本身没有20个字符,你偏要全部打印一遍,你以为printf()一个空字符不占用资源的啊?

授人以渔,不授人以鱼。
2013-03-17 23:56
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 22楼 TonyDeng
哦,这样啊,小生懂了,多谢指教,可惜已经结分了。。。
那我再问问,为什么没初始化,后面会出现很多空格,再出现很多问号啊???
2013-03-18 00:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
出现那些怪字符,正是因为你死硬循环20次造成的,比如字符串已经在num[5]处结束,但你循环要越过5直到19,这后面的就是未初始化的随机字符,全部显示出来,就是怪字符。用我那个循环,遇到'\0'就终止,不会做多余的事,也不需要知道在哪个位置终止,只要输入的字符串没有越界,程序就不会因为这样的代码而崩溃。

授人以渔,不授人以鱼。
2013-03-18 00:04
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
#include <stdio.h>
int main()
{
    for (int i = 0;i < 10;++i)
    {
        printf("%c", '\0');
    }
    printf("AAA\n");
    return 0;
}


[fly]存在即是合理[/fly]
2013-03-18 00:06
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 24楼 TonyDeng
我之前学的,怎么说,如果输入的字符长度小于定义长度,会自动以\0填充啊?
2013-03-18 00:10
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 25楼 azzbcc
what are you doing....不要这样欺负小孩子啊,我才5岁
2013-03-18 00:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没有自动填充这种东西,不要指望,因为没有这种规定,有些编译器提供的库函数可能会提供这种额外代码,但并非总有,所以不要依赖这种东西。太多的假设对你程序设计不利,牢记这个忠告,不要乱信那些话。

授人以渔,不授人以鱼。
2013-03-18 00:13
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 28楼 TonyDeng
好的,以后我都动手!!
2013-03-18 00:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
总之你记住,C的字符串是以'\0'为结束标志的(这就是所谓的cz字符串,z是zero的意思,即以0结尾),写直观代码,搜寻'\0'即可,不要硬性规定字符个数。安全字符串处理函数会多传递一个counter参数限制处理数目,即如果直到counter还没有遇到'\0'也结束,确保不越界处理字符串,这种安全型字符串处理函数后面都带有_s字样,用VC 2005以上编译器编译的时候,会对scanf()/printf()等函数给出警告,劝你使用安全函数,那就是scanf_s()/printf_s(),最经典就是gets(),很容易被溢出攻击,所以尽量使用gets_s(),遇到溢出输入会抛出错误,而不会放行。这是告诉你为什么会出现那个警告的原因,很多人忽略它,当然可以通过编译,但有隐患而已,旧式的C程序都那样,不过我觉得并不需要守大多数的规矩,以为这是微软扩展的东西就嗤之以鼻,以写传统代码为荣,那是拘泥不化。

[ 本帖最后由 TonyDeng 于 2013-3-18 00:29 编辑 ]

授人以渔,不授人以鱼。
2013-03-18 00:27
快速回复:帮忙看看哪里出问题了吧
数据加载中...
 
   



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

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