c - 使用 STRCPY C

标签 c strcpy

我代码:

#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/

相关文章:

c - 如何在 VS2013 中强制执行 c89 风格的变量声明

C strtok 和 strcpy

c - Strcpy 改变 struct int 数组

c - 这里有什么问题吗? C语言

c# - 用C#读取arduino发送到串口的信息

c - 为什么将堆分配的结构从 Rust 传递到 C 时,我的整数值发生了变化?

C strcpy 和 char

c - 使用 = 运算符时字符串数组出现意外结果

c - 标记外部文件

c - 在 C 中删除文件表明找不到该文件