| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1073 人关注过本帖
标题:求教关于字符串连接的问题
只看楼主 加入收藏
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:23 
求教关于字符串连接的问题
程序代码:
#include <stdio.h>
#include <string.h>

int main ()
{
    char str1[9] = "Are you ";
    char str2[4] = "ok?";

    strcat (str1, str2);

    printf("%s\n",str1);
    printf("%c",str1[10]);

    return 0;
}


谭浩强书上说,strcat(str1, str2)的目的是将str2的字符串连接到str1后面,最后输出str1,要求str1足够大,以便能后放下str2的字符串,在上面的程序中,str1的空间并不能放下str2,但是却能输出正确的结果。

推测,字符串的连接是将地址连接在一起。那么str1还有必要定义足够的空间吗?

还有,谭的书还值得看吗?
搜索更多相关主题的帖子: 字符串 
2015-08-25 10:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
偶然的可行不等于正确!

授人以渔,不授人以鱼。
2015-08-25 10:16
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 2楼 TonyDeng
可行的依据是什么呢?
2015-08-25 10:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这里可行是恰好前后两个字符串定义在紧邻的位置,你在中间插入别的数据看看,或者把两个变量对调一下位置。自己多试就知道了,彩票不是那么容易中的。

授人以渔,不授人以鱼。
2015-08-25 10:21
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 4楼 TonyDeng
程序代码:
#include <stdio.h>
#include <string.h>

int main ()
{
    char str2[4] = "ok?";
    char str3[5] = "haha";
    char str1[9] = "Are you ";

    strcat (str1, str2);

    printf("%s\n",str1);
    printf("%c",str1[10]);

    return 0;
}



对调,插其他数据后,结果还是正确!
2015-08-25 10:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你把所有字符串输出来看看,看破坏了什么?

授人以渔,不授人以鱼。
2015-08-25 10:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你如果觉得没问题,就这样写程序好了,再刻意弄点可行的例子,好支持自己的看法。

授人以渔,不授人以鱼。
2015-08-25 10:33
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 7楼 TonyDeng
输出str3,确实出问题了,str1空间不够,自动向上扩张,但str3的地址并没有变,导致str3和str1的部分重合,这样说不知对不对?
2015-08-25 10:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
是的。C语言并不检查数组越界,往后面的地址读和写数据,是否出问题,取决于那些地址是作什么用的,一旦它破坏了程序或系统的数据,就会出现不可预知的结果。像现在这样祗是破坏后面一些串,算是最轻微的,那种经常弹出“程序停止运行”错误框的现象,往往就是这样造成的。

授人以渔,不授人以鱼。
2015-08-25 11:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
刚看了一下你的发帖历史,这个问题跟第一次问的是相同性质呀。

授人以渔,不授人以鱼。
2015-08-25 11:19
快速回复:求教关于字符串连接的问题
数据加载中...
 
   



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

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