void foo(char *a, char *b)
{
    while(*a++ = *b++)
}请问:
这个函数的功能是什么?
是内存拷贝,还是字符串拷贝,还是其他的功能啊?大家帮帮小弟,谢谢啦!

解决方案 »

  1.   

    在这里说字符串拷贝比较准确。
    因为while会在取值为零的时候退出
      

  2.   

    如果两个字符串长度不一样怎么办,还是老老实实用strcpy吧
      

  3.   

    把B的字符拷贝到A里面,直到B结束
      

  4.   

    这样写很不安全,a可能会越界。
    下面是我的一个测试:#include <stdlib.h>
    #include <string.h>
    #include <stdio.h>void foo(char *a, char *b)
    {
        while(*a++ = *b++);
    }int main(){
    char a[] = "abcdefg";
    char b[3];
    printf("a.length=%d\n",strlen(a));
    printf("a:%s\n",a);
    foo(b,a);
    printf("***********\n");
    printf("a.length=%d\n",strlen(a));
    printf("b.length=%d\n",strlen(b));
    printf("a:%s\n",a);
    printf("b:%s\n",b);
    return 0;
    }
    输出结果:
    a.length=7
    a:abcdefg
    **************
    a.length=3
    b.length=7
    a:efg
    b:abcdefg
    可以看见由于b数组已经越界,在拷贝中,把a数组的内存空间吃掉了。
    从而造成了内存内容的不可知,无法寻址了。
      

  5.   

    C 里 缓冲区 不能越界应该是调用函数的人保证的. 跟函数本身无关. 调用者应该明白调用这个函数必需提供足够大的缓冲区. 这是设计模式问题,这里的函数本身没错,也不存在设计上的缺陷.我要说的是, 1) 语法问题: while 后 应该用 分号结束, 这里没有
    2) 效率不高对于32位系统,执行单字节拷贝,效率很低根据结束条件, 是拷贝至0, 这个函数实现的是 拷贝以 0 结尾的符串.
      

  6.   

    字符拷贝的实现。以下实现相同功能: 
    char* strcpy(char* a, char* b){
             int i;
             for(i=0; (a[i]=b[i])!=0; i++);
             return a; 
    }
     
    char* strcpy(char* a, char* b){         char* c=a; 
             while(*a++=*b++);
             return c;  
            }
    char* strcpy(char* a, char* b){         char* c=a; 
             while(*b){                    *a=*b;
                        a++;
                        b++ ;
                        }
                *a=*b;
                 a++;
                 b++ ;
             return c;  
            }
    char* strcpy(char* a, char* b){         char* c=a; 
             while(*b){                    *a=*b;
                        a++;
                        b++ ;
                        }
                *a=0;
             return c;  
            }
      

  7.   

    sz字符串COPY的一个不安全的实现
      

  8.   

    strcpy同样也无法判断是否越界,所以控制是否越界,应该需要客户程序自己控制