gpt4 book ai didi

c - 我遇到段错误,但我不明白为什么

转载 作者:行者123 更新时间:2023-11-30 18:33:04 25 4
gpt4 key购买 nike

正如标题所说。我不明白为什么这段代码会给我带来段错误!

#include <stdio.h>

void cp(char s[], char d[]);
int main () {
char s[100] = "hi there how are you";
char d[100];
cp(s, d);
printf("%s\n++++++++\n%s\n", s, d);
return 0;
}

void cp(char s[], char d[]) {
int i, p = 0;
while (s[i] != '\0') {
d[i] = s[i];
++i;
++p;
}
}

我知道 cp 的实现很糟糕!我这样写只是为了好玩,然后就发生了段错误。

最佳答案

在这行代码中:

int i, p = 0;

您只初始化了p,变量i未初始化,从它读取会导致UB。

正确的循环可以这样写:

for( size_t i = 0; ( d[i] = s[i] ) != 0; ++i );

(它还会复制空终止符,如果正确初始化i,您将丢失该终止符)

另一种变体是经典的 C 方式:

void cp(const char *s, char *d) 
{
while( *d++ = *s++ );
}

但通常在 C 目标中是第一个参数,而不是第二个(例如 strcpy())

关于c - 我遇到段错误,但我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59381570/

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