我代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char string[]="stackflow";
strcpy(&string[0],&string[1]);
puts(string);
getch();
}
结果是“顺流”。我不明白。你是谁可以解释一下吗?提前致谢。
最佳答案
调用strcpy(&string[0],&string[1]);
的意思是:复制从string[1]的地址开始的以NULL结尾的字符串到string的地址[0]。这意味着您正在将字符串从偏移量 1 (tackflow
) 开始复制到偏移量 0 的地址。或者换句话说:您正在将字符串向左移动一个字符,覆盖 s
.
strcpy
用于将以 NULL 字节(C 字符串)结尾的字节数组从一个地址(第二个参数)复制到另一个地址(第一个参数)。通常,它用于将一个字符串从一个内存位置复制到一个完全不同的内存位置:
char string[] = "stackflow";
char copied_string[10]; // length of "stackflow" + NULL byte
strcpy(copied_string, string);
puts(copied_string);
正如@PascalCuoq 正确指出的那样,您的调用是未定义的行为,这意味着任何 都可能发生。 standard says :
If copying takes place between objects that overlap, the behavior is undefined.
所以你很幸运你得到了一个“理智”的输出。
关于c - 使用 STRCPY C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21759894/