1

我目前正在编写一个程序,其中我陷入了 strcpy() 函数的另一种行为。这是它的简短演示......

我经历了以下问题:从 C 字符串中删除第一个和最后一个字符

//This program checks whether strcpy() is needed or not after doing the modification in the string 
#include <stdio.h>
#include <string.h>

int main()
{
        char mystr[] = "Nmy stringP";
        char *p = mystr ;
        p++;

        p[strlen(p)-1] = '\0';
        strcpy(mystr,p);
        printf("p : %s mystr: %s\n",p,mystr);

}

输出 :-

p : y strnng mystr: my strnng

如果我不使用 strcpy() 函数,那么我得到

p : my string mystr : Nmy string 

为什么会这样??

4

2 回答 2

9

标准说:

7.24.2.3

如果复制发生在重叠的对象之间,则行为未定义。

您可以使用memmove或完全不同的方法。

于 2013-04-08T04:34:01.620 回答
1

您不能使用strcpy重叠的内存位置,即,如果源字符串和目标字符串重叠。在这种情况下,行为是未定义的,如标准中所述。

但是您可以使用temp内存位置进行这样的交换

于 2013-04-08T04:51:43.493 回答