c语言程序中,定义几个字符数组,在内存中是怎么存储的?
chartest[30]="SWORD";charlist[60]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";chardata[20]="ABCDE";s...
char test[30] = "SWORD";
char list[60] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char data[20] = "ABCDE";
strcat(test,list);
printf("%s\n",test);
printf("%s\n",list);
printf("%s\n",data);
为什么最后的输出是Z,刚好是test数组之外的一个字符? 展开
char list[60] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char data[20] = "ABCDE";
strcat(test,list);
printf("%s\n",test);
printf("%s\n",list);
printf("%s\n",data);
为什么最后的输出是Z,刚好是test数组之外的一个字符? 展开
3个回答
展开全部
你的test数组太小了,strcat后越界了,最后结果不定
strcat(test,list)要求test至少要有5+26+1才能正常容纳合并后的字串
下面这样就没问题了:
char test[100] = "SWORD";
char list[60] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char data[20] = "ABCDE";
strcat(test,list);
printf("%s\n",test);
printf("%s\n",list);
printf("%s\n",data);
strcat(test,list)要求test至少要有5+26+1才能正常容纳合并后的字串
下面这样就没问题了:
char test[100] = "SWORD";
char list[60] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char data[20] = "ABCDE";
strcat(test,list);
printf("%s\n",test);
printf("%s\n",list);
printf("%s\n",data);
追问
我知道是越界了,但是为什么会影响到data[]数组的呢?这几个数组在内存中是怎么存储的呢?
追答
平台相关, 这三个数组的内存分配次序不定,并且位置间隔也不定,你的情况是test data list这样的次序分配的内存,然后strcat以后test溢出到了data的空间,并且Z字符处在了data的起始地址,我这样实验了一下(win7x86 c++express9.0),也出现了你说的情况:
#include
#include
int main()
{
char test[3] = "AA";
char list[6] = "BBBBB";
char data[4] = "CCC";
printf("%p %s\n",test,test);
printf("%p %s\n",list,list);
printf("%p %s\n",data,data);
printf("\n");
strcat(test,list);
printf("%p %s\n",test,test);
printf("%p %s\n",list,list);
printf("%p %s\n",data,data);
}
release模式运行结果:
0021F95C AA
0021F964 BBBBB
0021F960 CCC
0021F95C AABBBBB
0021F964 BBBBB
0021F960 BBB
请按任意键继续. . .
所以越界后的状况是说不清的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strcat(test,list);
意为:把list接在test后面;所以最后输出Z,另外%S遇到'\0'结束输入或输出。
意为:把list接在test后面;所以最后输出Z,另外%S遇到'\0'结束输入或输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询