gpt4 book ai didi

c - strcpy 如何在幕后工作?

转载 作者:太空狗 更新时间:2023-10-29 17:15:37 25 4
gpt4 key购买 nike

对于某些人来说,这可能是一个非常基本的问题。我试图了解 strcpy 在幕后的实际工作方式。例如,在这段代码中

#include <stdio.h>
#include <string.h>
int main ()
{
char s[6] = "Hello";
char a[20] = "world isnsadsdas";
strcpy(s,a);

printf("%s\n",s);
printf("%d\n", sizeof(s));
return 0;
}

因为我声明 s 是一个静态数组,其大小小于源的大小。我认为它不会打印整个单词,但它确实打印了 world isnsadsdas .. 所以,我认为如果目标小于源,这个 strcpy 函数可能正在分配新的大小。但是现在,当我检查 sizeof(s) 时,它仍然是 6,但它打印出的不止于此。实际效果如何?

最佳答案

你刚刚造成了未定义的行为,所以任何事情都有可能发生。就您而言,您很幸运并且没有崩溃,但是您不应该依赖这种情况。这是一个简化的 strcpy 实现(但它与许多真实的实现相差不远):

char *strcpy(char *d, const char *s)
{
char *saved = d;
while (*s)
{
*d++ = *s++;
}
*d = 0;
return saved;
}

sizeof 只是从编译时返回数组的大小。如果您使用 strlen,我想您会看到您所期望的。但正如我上面提到的,依赖未定义的行为是一个坏主意。

关于c - strcpy 如何在幕后工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14723381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com