| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1126 人关注过本帖
标题:strcat中,字符串长度定义差异导致的结果不同
取消只看楼主 加入收藏
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
strcat中,字符串长度定义差异导致的结果不同
程序代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
    char name[8] = "I like ";    //如果使用char *name = "I like ";,也会出现同样结果。
    char *string = "C programming.\n";

    printf("%s\n%ld\n", name, strlen(name));
    strcat(name, string);
    printf("%s%ld\n", name, strlen(name));
    return 0;
}
执行结果(这是在linux下执行的结果):
I like
7
I like C programming.
22
*** stack smashing detected ***: ./test terminated
已放弃 (核心已转储)
程序代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
    char name[9] = "I like ";
    char *string = "C programming.\n";

    printf("%s\n%ld\n", name, strlen(name));
    strcat(name, string);
    printf("%s%ld\n", name, strlen(name));
    return 0;
}
执行结果:
I like
7
I like C programming.
22
向strcat传递的第一个字符串必须足以容纳第二个字符串,所以*name和name[8]都会出错,但是name[9]明显不足一容纳string,但是却正常执行。这是为什么呢?


[ 本帖最后由 gleerat 于 2013-1-9 11:46 编辑 ]
搜索更多相关主题的帖子: 字符串 
2013-01-09 11:01
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 2楼 yaobao
    char name[8] = "I like ";    //char name[] = "I like ";也是可以正常使用的
这样使用是没错的,都会输出
D:\>test.exe
I like
7
I like C programming.
22
但是
char *name = "I like ";
会在调用strcat时,程序被异常中止
D:\>test.exe
I like
7
这里都是在Windows 7下使用gcc(32位)编译执行的,主贴中都是在linux下使用gcc(64位)编译执行的。

明察、慎思、笃行
2013-01-09 11:45
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 5楼 zklhp
主贴中的出错信息,见过不少了,也没查出个所以然来。
关于堆栈,一无所知。计算机原理没有几乎接触过。

明察、慎思、笃行
2013-01-10 10:59
快速回复:strcat中,字符串长度定义差异导致的结果不同
数据加载中...
 
   



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

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