| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2248 人关注过本帖
标题:[讨论]关于字符数组的长度定义.
只看楼主 加入收藏
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
 问题点数:0 回复次数:31 
[讨论]关于字符数组的长度定义.

#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};
char str3[10];
str3[10]=strcat(str1,str2);
printf("%s",str3[10]);
}

按照老谭书中说的str3字符数组必须大于st1+str2的数组的长度.否则会出错. 但为什么str3[10]也完成正确呢?

另外
#include "stdio.h"
main()
{
char str1[]={"China GuangDong "};
char str2[]={"ShenZhen"};

printf("%s",strcat(str1,str2));
}
str1,str2不定义长度也会正确.老谭<C程序设计第二版>书上的P136.却说不对.

搜索更多相关主题的帖子: 定义 字符 长度 main 
2006-05-06 15:21
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用xsimon在2006-5-6 15:21:00的发言:

#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};
char str3[10];
str3[10]=strcat(str1,str2); /*难道你没发现你这个str3[10]已经越界了吗,您此举相当于定义一个指针q=(&str3[9])+1,然后把*q=strcat(str1,str2); 当然是可以的了!*/
printf("%s",str3[10]);
}

按照老谭书中说的str3字符数组必须大于st1+str2的数组的长度.否则会出错. 但为什么str3[10]也完成正确呢?

另外
#include "stdio.h"
main()
{
char str1[]={"China GuangDong "};   /*一维允许这样*/
char str2[]={"ShenZhen"};

printf("%s",strcat(str1,str2));
}
str1,str2不定义长度也会正确.老谭<C程序设计第二版>书上的P136.却说不对.  /*尽信书等于无书!*/

[此贴子已经被作者于2006-5-6 15:42:26编辑过]


对不礼貌的女生收钱......
2006-05-06 15:35
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
第一个因为程序小所以没题!第二个是传递的受地址!所以没问题,但是第一个可能发现分配区域小而数据溢出而程序出现问题!

用0-1统治世界!
2006-05-06 15:38
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
第一个程序这样做,很危险,因为指针q是未知的,

对不礼貌的女生收钱......
2006-05-06 15:41
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
没事,用吧,野指针,没事,什么时候你系统报废了你就知道是怎么回事了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-06 15:49
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};
char str3[10];
str3[10]=strcat(str1,str2);
printf("%s",str3[10]);
}

printf("%s",str3[10]);
这打印什么呢


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-06 15:51
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用soft_wind在2006-5-6 15:41:00的发言:
第一个程序这样做,很危险,因为指针q是未知的,

#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};

printf("%s",strcat(str1,str2));
}

可这样也行呀. str1的长度少于str1和str2之和,也没有出错...

[此贴子已经被作者于2006-5-6 15:54:40编辑过]

2006-05-06 15:52
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};

printf("%s",strcpy(str1,str2,2));
}

运行的结果仍然是ShenZhen,而不是只复制str2中的前两个字符"Sh". 为什么?
2006-05-06 15:54
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
printf("%s",strcpy(str1,str2,2));


我晕,把最后的2去掉

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-06 15:56
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-6 15:51:00的发言:

#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};
char str3[10];
str3[10]=strcat(str1,str2);
printf("%s",str3[10]);
}

printf("%s",str3[10]);
这打印什么呢

China GuangDong ShenZhen

2006-05-06 15:58
快速回复:[讨论]关于字符数组的长度定义.
数据加载中...
 
   



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

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