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

如何在以空字节(\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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:30:40