gpt4 book ai didi

c - 需要帮助理解这个用函数模拟 strcpy() 的 C 程序

转载 作者:行者123 更新时间:2023-11-30 19:00:21 26 4
gpt4 key购买 nike

这是我的代码。我正在尝试模拟 strcpy()。该代码有效,但我有几个问题。

#include <stdio.h>
#include <stdlib.h>

char *strcpy(char *d, const char *s);

int main()
{
char strOne[] = "Welcome to the world of programming!";
char strTwo[] = "Hello world!";
printf("String One: %s\n", strOne);
printf("String Two before strcpy(): %s\n", strTwo);
strcpy(strTwo, strOne);
printf("String Two after strcpy(): %s\n", strTwo);

return 0;
}

char *strcpy(char *d, const char *s)
{
while (*s)
{
*d = *s;
d++;
s++;
}
*d = 0;
return 0;
}
  1. 当 *s 递增到数组中存储“\0”的位置时,是否会因为“\0”而使 while 条件变为 false? while 读的是“\0”还是只是“0”?

  2. 如果读取“1”,则“while”条件为真。 *s 的所有先前值应在 while 条件下读取为单个字符,但循环仍会执行。为什么会出现这种情况?数组 *s 指向的所有单个字符是否都等于值“1”?

  3. *d = 0; 到底是做什么的?按照我的理解,当退出 while 循环时,复制过程就完成了。那么为什么删除 *d = 0 会导致显示不正确的输出?

没有*d = 0的输出:

String Two before strcpy(): Hello world!                                                                                       
String Two after strcpy(): Welcome to the world of programming! programming!

输出*d = 0:

String Two before strcpy(): Hello world!                                                                                       
String Two after strcpy(): Welcome to the world of programming!

最佳答案

ASCII 表中的字符假定值范围为 01270NULL'\0',因此条件始终为真,除非字符是 '\0'

*d = 0'\0' 放置在字符串末尾;这就是 C 中字符串的终止方式。如果不终止字符串,任何内容都可以打印到字符串末尾,并且程序无法知道它在哪里结束。这是未定义的行为。

关于c - 需要帮助理解这个用函数模拟 strcpy() 的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59955642/

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