gpt4 book ai didi

在 c 中复制一个字符串 - 内存问题 :

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:04 25 4
gpt4 key购买 nike

考虑以下代码:

t[7] = "Hellow\0";
s[3] = "Dad";
//now copy t to s using the following strcpy function:

void strcpy(char *s, char *t) {
int i = 0;

while ((s[i] = t[i]) != '\0')
i++;
}

以上代码摘自《The C programming Language book》。我的问题是——我们正在将 7 个字节复制到声明为 3 个字节的内容。我怎么知道复制后,内存中s[]之后的其他数据没有被删除?

还有一个问题:char *schar* s 相同吗?

谢谢!

最佳答案

正如您正确指出的那样,将 s[3] 作为第一个参数传递将覆盖一些很可能被其他东西使用的内存。充其量您的程序会立即崩溃;在最坏的情况下,它会继续运行、损坏,并最终破坏它应该处理的东西。

在 C 中执行此操作的预期方法是永远不要传递比要求短的数组。

顺便说一句,看起来你已经交换了 st;大概是这个意思:

void strcpy(char *t, char *s) {
int i = 0;

while ((t[i] = s[i]) != '\0')
i++;
}

您现在可以使用此修改后的 strcpy 例程将 s[4] 复制到 t[7]:

char t[] = "Hellow";
char s[] = "Dad";

strcpy(t, s);

(编辑:s 的长度现在是固定的)

关于在 c 中复制一个字符串 - 内存问题 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3482893/

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