关于数组越界的问题!

云端的人 发布于 2013/11/08 14:02
阅读 186
收藏 0

有两个数组。char a[10],char b[10].

 如果用,strcpy(a,b),把b数组的元素拷贝到a数组中,是否会出现越界的危险!

我的答案是不会,不只是我说的对不对!

还有个问题

void test2()

{   char string[10],str1[10];

    int i;

   for(i=0;i<10;i++)

  {

    str1[i]='a';//我想问这里给str1赋值0-9的数组元素为'a',赋值结束会不会后面自动加上空字符?如果不会,那是为什么;书上的答案说后面没有加空字符,在随后调用strcpy时无法判断什么时候赋值结束,很奇怪,它不是本身就自带空字符的吗

    }

    strcpy(string,str1);

加载中
0
中山野鬼
中山野鬼
strcpy一定由越界的危险,需要手工检测或代码逻辑中保证。你的答案是错误的。哈。后面的问,是做梦。哈。程序对空间运行,现在一般会先整体清空给入,给你一种总是有0的错觉。空间被反复用过后,可就不一定了。。strcpy(a,b)不出错只是a[10]这个地址,系统初始化时,是0而已。如果这个地址空间放了别的数据,你就麻烦大了。哈,你的a实际占用的是a[0]  到a[9]的地址,
云端的人
云端的人
谢谢你的关注
0
道友慢走
道友慢走

strcpy这个函数干吗的?拷贝字符串的,c里面怎么界定字符串边界的?顺序找,找到'\0'就是字符串的边界。也就是说,strcpy从数组b开始,找到一个非'\0'的,就塞给a(这个函数不管a的size的),一直找到'\0',然后把'\0'给a。

strcpy(a,b),除非你保证数组b的最后一个元素或者中间的元素有'\0',否则一定越界。

仔细研究下这个函数的执行过程,你就明白了。

云端的人
云端的人
谢谢了哦
云端的人
云端的人
恩恩 ,我都已经懂了
返回顶部
顶部