| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1073 人关注过本帖
标题:求教关于字符串连接的问题
只看楼主 加入收藏
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 10楼 TonyDeng
是的,最近在学数组这块,因为写这个例程时想到会不会数组连接时strcat(str1,str2),str2数据并没有正真写入str1,而是将连接后的数据存入另外一个数组,并返回这个数组的地址。
不过现在想想,应该是不可能的,数组都要定义并声明大小,编译器不会自动生成一个大小刚好吻合的数组用来存放连接后的数据。
2015-08-25 11:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在C中,“字符串”就是字符数组。

授人以渔,不授人以鱼。
2015-08-25 11:35
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 12楼 TonyDeng
恩,明白
2015-08-25 11:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在C++中,string才是可以自动增长的字符串。

授人以渔,不授人以鱼。
2015-08-25 11:38
hanwang3
Rank: 1
等 级:新手上路
帖 子:24
专家分:7
注 册:2015-8-24
收藏
得分:0 
回复 14楼 TonyDeng
还没学c++,看来C++在这一块是对C的改进?
2015-08-25 11:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的。

授人以渔,不授人以鱼。
2015-08-25 11:45
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
楼主可以先printf("%p,%p,%p\n",&str2[0],&str3[0],&str1[0]);查看下各数组的起始地址,你会发现每个数组间有4个字节的缓冲,所以允许你超4个字节而不一定显示异常(直接初始化赋值长度超则无法通过编译)。

能编个毛线衣吗?
2015-08-25 12:26
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
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 18楼 hanwang3
从你提供的情况看:
各数组内存起始地址为:str2=22ff08,str3=22ff03,str1=22fefa
个数组长度为:str2=4,str3=5,str1=9
各数组实际间隔为:str2-str3=22ff08-22ff03=5字节,比str2实际长度多1字节,可允许超1个字符的溢出,str3-str1=22ff03-22fefa=c=12字节,比str3实际长度多7字节,可允许超7个字符的溢出,str1允许多少需要知道变量a的地址。
由此可知,并不是你所说的没有缓冲。产生缓冲的根本原因应该是栈内存对齐产生的。

能编个毛线衣吗?
2015-08-25 17:01
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.019401 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved