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

#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
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
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
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-6 15:56:00的发言:
printf("%s",strcpy(str1,str2,2));


我晕,把最后的2去掉

谭书上说的,可以用strcpy将字符串2中前面若干个字符复制到另一字符数组中去. 例如:
strcpy(str1, str2, 2);
作用是将str2中前面2个字符复制到str1中去,然后再加上一个'\0'.

2006-05-06 16:00
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-6 15:49:00的发言:
没事,用吧,野指针,没事,什么时候你系统报废了你就知道是怎么回事了

为何会导致系统报废??

2006-05-06 16:01
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用soft_wind在2006-5-6 16:04:00的发言:

您是不是弄错了,您是要用memcpy(str1,str2,2);这个函数吧,
但即便您用了这个函数,也只是把China --等的字符串的前两个换成Sh而已
并不改变后面的字符,即变为Shina GuangDong而已.
另外回复上上楼的,您在printf (stract());的时候,空间是由系统开辟的,虽是不可知的,但是安全的,当然就没问题了,这就同char *p="sting";一样,是没问题的.
但str3[10]这越界了,地址无法预料,故而是危险的!

书上确实是strcpy (P137).不是memcpy. 看来又是老谭的书有问题. 谢谢.

2006-05-06 16:11
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-6 16:10:00的发言:
我都说了潭书是垃圾,你不信会后悔的

刚学C,他的书还是不错的. 看完他的这本,再看看英文版的<The_C_Programming_Language> and <C primer plus> 比较一下. 不知道大家认为<Expert C Programming>这本书怎么样?

2006-05-06 16:15
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-6 16:15:00的发言:

书上少了个字符,是strncpy而不是strcpy

绝对不是少一个字符. 而strncpy是替代str1中的前面两个字符. 而不是只复制str2中的前两个字符替代str1中的全部字符.
#include "stdio.h"
main()
{
char str1[20]={"China GuangDong "};
char str2[10]={"ShenZhen"};

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

结果为: Shina GuangDong, 而不是Sh.

2006-05-06 16:19
xsimon
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2006-5-5
收藏
得分:0 
以下是引用论坛在2006-5-6 16:13:00的发言:

China GuangDong ShenZhen


你打印了吗

是的, 打印结果为"China GuangDong ShenZhen" 而没有出错.

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



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

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