gpt4 book ai didi

c - 循环中的意外情况

转载 作者:行者123 更新时间:2023-11-30 20:11:14 24 4
gpt4 key购买 nike

#include <stdio.h>

void copy1(char *s1, const char *s2) {
int i;
for (i = 0; (s1[i] = s2[i]) != '\0'; i++)
;
}

void copy2(char *s1, const char *s2) {
for ( ; (*s1 = *s2) != '\0'; s1++, s2++)
;
}

int main() {
char string1[10];
char *string2 = "Hello";
char string3[10];
char string4[] = "Good Bye";
copy1(string1, string2);
printf("string1 = %s\n", string1);
copy2(string3, string4);
printf("string3 = %s\n", string3);
return 0;
}

我有这样的代码,但我希望它应该打印:

Hello56789
Good Bye89

但它只产生了:

Hello Good Bye

我无法理解为什么会发生这种情况。我认为当string2string4到达'\0'时循环就会停止。如果发生这种情况,为什么我看不到数组中的剩余数字 (56789..)?

我的意思是 Hello 的长度是 5。当发生这种情况时: for ( i = 0; ( s1[ i ] = s2[ i ] ) != '\0'; i++ )就在之后Hello 的第 5 个元素,\0 到来,循环结束。因此,数组中的 0,1,2,3,4 元素被 Hello 的字母替换。但是,仍然有 5,6,7,8,9 string1 未被替换。我们用 %s 打印 string1,这会是我看不到数字的原因吗?

最佳答案

我期望的实际输出是这样的:

string1 = Hello
string3 = Good Bye

这两个函数分别使用索引表示法和指针推送来实现 strcpy() 的复制部分。它们都将字符从源(第二个参数)复制到目标(第一个参数),直到并包括空终止符。评估测试实际上复制了字符:复制空终止符并且循环停止。

其余目标数组 string1string3 保持未初始化状态。它们不包含任何精确的内容:这些数组在自动存储上分配(又名在堆栈上)并且初始化。我不知道您从哪里得出数组初始内容的概念,也许是从某些使用此内容初始化数组的示例程序中得出的,但默认情况下不会发生这种情况。

printf() 输出数组 string1 的内容作为 %s 格式的参数,被视为 C 字符串,并在到达空终止符时停止。

关于c - 循环中的意外情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41665753/

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