我代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char string[]="stackflow";
strcpy(&string[0],&string[1]);
puts(string);
getch();
}
Run Code Online (Sandbox Code Playgroud)
结果是"潮流".我不明白.你能解释一下谁?预先感谢.
调用strcpy(&string[0],&string[1]);意味着:将从字符串[1]的地址开始的以NULL结尾的字符串复制到字符串[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);
Run Code Online (Sandbox Code Playgroud)
正如@PascalCuoq正确指出的那样,你的调用是未定义的行为,这意味着任何事情都可能发生.该标准说:
如果在重叠的对象之间进行复制,则行为未定义.
所以你很幸运,你有一个"理智"的输出.