如何在以空字节(\0)分隔的字符数组末尾追加字符串?
解决方案
首先,你的错误代码str[8] = new_str;存在类型不匹配问题:str[8]是单个char变量,而new_str是字符数组(会被转为char*指针),直接赋值完全无效,这是核心错误。
针对你的需求——保留原数组末尾的空字节,在其后追加新字符串并添加新的空字节,可按以下步骤实现:
关键思路
原数组的结构是字符串1\0字符串2\0...\0,我们需要找到最后一个空字节的位置,在它的下一个位置开始写入新字符串,最后由字符串复制函数自动补充新的空字节。
可行代码示例
#include <string.h> int main() { // 初始化原数组,预留足够空间避免溢出 char str[20] = {'S', 't', 'r', 'i', 'n', 'g', '\0', 'a', 'r', 'r', 'a', 'y', '\0'}; char new_str[] = "new"; // 找到数组中最后一个空字节的位置 char *last_null = str + sizeof(str) - 1; while (last_null > str && *last_null != '\0') { last_null--; } // 移动到最后一个空字节的下一个写入位置 last_null++; // 复制新字符串,strcpy会自动在末尾添加空字节 strcpy(last_null, new_str); // 此时数组内容为:{'S','t','r','i','n','g','\0','a','r','r','a','y','\0','n','e','w','\0'} return 0; }
替代实现(手动复制,无需<string.h>)
如果不想用strcpy,可以手动逐个字符复制:
// 找到last_null的步骤同上 char *dest = last_null; const char *src = new_str; // 复制新字符串的每个字符 while (*src != '\0') { *dest++ = *src++; } // 手动添加末尾空字节 *dest = '\0';
为什么strcat不适用
你说得没错,strcat会从数组的第一个空字节开始覆盖并追加内容,比如原数组中的"String\0Array\0",用strcat会覆盖"String"后的空字节,变成"Stringnew\0Array\0",完全不符合你的需求。
内容的提问来源于stack exchange,提问作者Xoniterfos
相关产品推荐
相关产品推荐

