如何正确使用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
相关产品推荐
相关产品推荐

