| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1073 人关注过本帖
标题:求教关于字符串连接的问题
取消只看楼主 加入收藏
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:8 
求教关于字符串连接的问题
程序代码:
#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
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 2楼 TonyDeng
可行的依据是什么呢?
2015-08-25 10:18
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
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 7楼 TonyDeng
输出str3,确实出问题了,str1空间不够,自动向上扩张,但str3的地址并没有变,导致str3和str1的部分重合,这样说不知对不对?
2015-08-25 10:54
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 10楼 TonyDeng
是的,最近在学数组这块,因为写这个例程时想到会不会数组连接时strcat(str1,str2),str2数据并没有正真写入str1,而是将连接后的数据存入另外一个数组,并返回这个数组的地址。
不过现在想想,应该是不可能的,数组都要定义并声明大小,编译器不会自动生成一个大小刚好吻合的数组用来存放连接后的数据。
2015-08-25 11:32
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 12楼 TonyDeng
恩,明白
2015-08-25 11:37
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 14楼 TonyDeng
还没学c++,看来C++在这一块是对C的改进?
2015-08-25 11:44
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 17楼 wmf2014
我试了一下没有4个字节的缓冲,不知道方法对不对。。。
程序代码:
#include <stdio.h>
#include <string.h>

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

    printf("%p, %p, %p\n", str2, str3, str1);
    printf("%p, %p, %p, %p\n", &str2[0], &str2[1], &str2[2], &str2[3]);
    a = strcmp(str1, str2);

    strcat (str2, str1);

    printf("%s\n", str1);
    printf("%s\n", str2);
    printf("%s\n", str3);
    printf("%c\n", str1[10]);
    printf("%d\n", a);

    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册
2015-08-25 14:26
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 19楼 wmf2014
str2 - str3 = 5字节,这个应该是存放str3的,是正好的。str3 - str1 = 9字节,用来存放str1,也是正好的。
2015-08-25 19:27
快速回复:求教关于字符串连接的问题
数据加载中...
 
   



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

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