关于C#:strcpy()无法正常工作

strcpy () not working properly

我目前正在编写一个程序,我被困在strcpy()函数的另一种行为中。以下是它的简短演示…

我回答了以下问题:从C字符串中去掉第一个和最后一个字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//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
"
,p,mystr);

}

输出:

1
p : y strnng mystr: my strnng

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

1
p : my string mystr : Nmy string

为什么会这样??


标准规定:

7.24.2.3

If copying takes place between objects that overlap, the behavior is
undefined.

您可以同时使用memmove或其他方法。


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

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