You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言strCpy函数返回指向空终止符的指针却能正确输出字符串的原因疑问

C语言strCpy函数返回指向空终止符的指针却能正确输出字符串的原因疑问

嘿,这个问题问得特别到位,刚好能帮你理清C语言里指针和字符串的关键逻辑!咱们一步步拆解来看:

首先要戳破一个核心误解:你的main函数根本没用到strCpy的返回值!
你看main里的代码:

strCpy(string2, string1);
printf("%s\n", string2);

这里你打印的是string2,它是数组的起始地址——也就是拷贝开始时dest指向的位置,而不是函数最后返回的那个指向'\0'的指针。所以哪怕函数返回的是字符串末尾的终止符,也完全不影响你打印string2的结果,因为你根本没用到这个返回值。

再说说你写的这个strCpy函数的设计:

  • 标准库的strcpy函数是返回目标字符串的起始地址(也就是传入的dest初始值),这样可以支持链式调用,比如printf("%s", strcpy(dest, src));。
  • 而你写的这个函数,最后返回的是循环结束后的dest(已经移到了'\0'的位置),这其实不符合标准strcpy的设计规范。

如果真的用这个返回值的话,结果就会和你预期的一样:
比如把main改成这样:

char *result = strCpy(string2, string1);
printf("%s\n", result);

这时候打印出来的就是空字符串,因为result指向的是string2里的'\0',printf遇到'\0'就会停止输出。

最后再回顾一下拷贝过程:
当你调用strCpy(string2, string1)时,初始的dest指向string2[0],循环里逐个把orig的字符赋值给dest,同时两个指针都往后移。等循环结束,dest已经移到了string2里对应原字符串最后一个字符的下一位,然后你给它赋值'\0',这时候dest就指向了终止符,但string2的起始地址始终没变,所以直接用string2打印,自然能输出完整的拷贝后的字符串。

备注:内容来源于stack exchange,提问作者NicolasPaiva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:32:59