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

C语言如何通过指针在for循环中逐元素复制缓冲区字符数组内容

C语言指针实现字符数组逐元素复制方案

原代码问题排查

你的代码运行未得到预期结果,核心存在两个问题:

  • 缺失字符串空终止符:C语言中字符串要求以\0作为结束标记,你的循环仅执行4次,只复制了s/t/o/p四个可见字符,没有写入终止符,printf用%s格式输出时会持续向后读取内存中的随机值,出现乱码或异常输出。
  • 冗余库函数调用:逐元素指针操作场景下不需要调用strncpy,直接通过指针解引用赋值就可以完成单字符复制,逐次传长度1调用strncpy属于不必要的开销,也不符合“纯指针操作”的需求。

修正后的纯指针实现代码

#include <stdio.h>
int main()
{
    char buffer[5] = "stop";    // 源字符数组,实际存储为's','t','o','p','\0'共5个元素
    char copy[5];               // 目标空字符数组

    // 定义指针并初始化,分别指向源、目标数组的起始地址
    char *buffer_ptr, *copy_ptr;
    buffer_ptr = buffer;
    copy_ptr = copy;

    // 逐字符复制,直到遇到源字符串的空终止符
    while (*buffer_ptr != '\0')
    {
        // 解引用指针,直接赋值当前指向的字符
        *copy_ptr = *buffer_ptr;
        // 两个指针同时向后偏移1个字符长度
        buffer_ptr++;
        copy_ptr++;
    }
    // 手动写入字符串终止符,保证输出正常
    *copy_ptr = '\0';

    printf("%s\n", copy);
    return 0; 
}

实现逻辑说明

  • 指针初始化时直接指向数组首地址,不需要额外引入下标变量i,完全通过指针偏移完成遍历
  • 循环判断条件直接读取源指针指向的内容,遇到\0时停止复制可见字符,最后单独给目标数组写入终止符,符合C语言字符串的存储规范
  • 如果要沿用原来的for循环写法,只需要在for循环结束后添加一行*copy_ptr = '\0';也能得到正确结果,但逐次调用strncpy的写法存在冗余,不推荐使用。

内容的提问来源于stack exchange,提问作者SUD pythonism

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:06:25