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

如何正确使用C语言memcpy()?字符串替换后输出截断问题

字符串替换后被截断的问题解决

你遇到的问题是因为memcpy把字符串结束符'\0'也拷贝到了目标数组中,导致输出时字符串被提前截断。

问题原因

  • 定义src[6] = "12345"时,C语言会自动在"12345"末尾添加'\0'作为字符串结束标记,所以src的第6个元素就是'\0'。
  • 调用memcpy(original+3, src, sizeof(char)*6)时,会把src里的6个字符(包括'\0')全部覆盖到original从第3位开始的位置。这导致original[8](3+5的位置)被设置成'\0',而printf输出字符串时遇到'\0'就会停止,所以后面的ijklmnop无法显示。

解决方案

要替换的"defgh"和"12345"长度都是5,只需拷贝5个字符即可,不需要包含结束符'\0'。修改memcpy的第三个参数为5:

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

int main() {
  char original[20] = "abcdefghijklmnop";
  char src[] = "12345";
  memcpy(original+3, src, 5); // 仅拷贝5个字符,不包含结束符
  printf("original : %s\n", original);
}

效果说明

修改后,original中从第3位开始的5个字符被替换为"12345",原字符串末尾的'\0'保持不变,printf会输出完整的abc12345ijklmnop。

内容的提问来源于stack exchange,提问作者Amine Zahrani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:51:19