好像strcpy(p, p+2)不会有问题,strcpy(p+2, p)会有问题。而msdn上说两个都有问题!

解决方案 »

  1.   

    第二个肯定有问题char* strcpy(char *dest, const char* src)会不会跟第二个参数有冲突,但是我在linux运行好像没什么问题
      

  2.   

    两个都有问题,指针越介写了,如串p长度为10,则p+10,p+11的内存被越界写了,可能会破坏了其它程序
      

  3.   

    改正,strcpy(p, p+2);没问题
    p为"abcde"
    若strcpy(p, p+2);执行后是"cdede"         //没问题
    若strcpy(p+2, p);执行后是"ababcde"       //有问题
      

  4.   

    串p的长度足够长!我说的有问题是指并没有达到原来的目的,如strcpy(p+2, p)是想把p的内容向后移两位,可是移动后内容却发生了改变
      

  5.   

    我在程序中经常用strcpy(p, p+2)都没发现有什么问题啊
      

  6.   

    strcpy是不会有问题的,问题是得到的结果是不是你想要的
      

  7.   

    strcpy(p, p+2).
    你能得到正确结果吗??
      

  8.   

    strcpy(p+2, p),执行后太可怕了。。程序可呢功能崩溃掉,
    就和俺的帅一样~~~:)
      

  9.   

    两个都有问题,
    第一个
    char p[] = "c";
    strcpy(p, p+2); 能正常执行吗?
      

  10.   

    如果不是溢出的问题,那就没错误,只是p为"abcde"若strcpy(p+2, p);执行后是"ababcde"       
      
      

  11.   

    你们想问题也太简单了!如果
    char p[256]="abcde";
    strcpy(p+2, p);的结果就是"ababcde"了吗?
    你知道strcpy内部是怎么实现的吗?你看了msdn上说的结果是未知的结论吗?
    你想想读内存与写内存都不是一次完成的,假如一个读三个写三个,则结果就成了"abcbc",这就是因为内存重叠的原因,所以msdn上推荐使用memmove这个函数