当前位置: 代码迷 >> C语言 >> [讨论]关于字符数组的长度定义.
  详细解决方案

[讨论]关于字符数组的长度定义.

热度:125   发布时间:2006-05-06 15:21:00.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]);
}

按照老谭书中说的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  

----------------解决方案--------------------------------------------------------
以下是引用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编辑过]


----------------解决方案--------------------------------------------------------
第一个因为程序小所以没题!第二个是传递的受地址!所以没问题,但是第一个可能发现分配区域小而数据溢出而程序出现问题!
----------------解决方案--------------------------------------------------------
第一个程序这样做,很危险,因为指针q是未知的,
----------------解决方案--------------------------------------------------------
没事,用吧,野指针,没事,什么时候你系统报废了你就知道是怎么回事了
----------------解决方案--------------------------------------------------------

#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]);
这打印什么呢


----------------解决方案--------------------------------------------------------
以下是引用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编辑过]


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

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

运行的结果仍然是ShenZhen,而不是只复制str2中的前两个字符"Sh". 为什么?
----------------解决方案--------------------------------------------------------
printf("%s",strcpy(str1,str2,2));


我晕,把最后的2去掉
----------------解决方案--------------------------------------------------------
以下是引用论坛在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


----------------解决方案--------------------------------------------------------
  相关解决方案