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

C语言如何仅通过指针实现字符串数组逐字符复制

仅通过指针完成跨字符串数组字符复制的实现

现有代码错误点

  • 类型不匹配:循环内copy_ptr = buffer[i];是将char类型的字符值直接赋值给char*类型的指针变量,相当于让指针指向ASCII码对应地址的非法内存,编译阶段就会抛出类型错误,没有完成任何内存写入操作。
  • 指针操作逻辑错误:没有对指针做解引用操作,全程修改的是指针本身存储的地址值,没有向copy数组的内存空间写入任何源数据;且仅移动了目标指针,源数据读取指针完全没有移动,也没有同步。
  • 无效输出:最后调用puts(result);时代码中从未定义result变量,无法完成输出。
  • 冗余语法错误:代码末尾多了一个未匹配的右大括号},无法正常编译。
  • 不符合需求:预先定义的buffer_ptr全程未使用,依然在使用数组下标buffer[i]取值,没有达到“仅通过指针操作”的要求。

正确实现代码

纯指针操作不需要依赖数组下标,直接通过移动两个指针完成逐字节拷贝,注意必须通过解引用*操作读写指针指向的内存内容:

#include <stdio.h>
int main()
{
    char buffer[5] = "stop";    // 源字符数组,存储字符串"stop"及末尾结束符'\0'
    char copy[5];               // 目标存储数组

    // 两个指针分别指向源数组、目标数组的起始内存地址
    char *buffer_ptr = buffer;
    char *copy_ptr = copy;

    // 逐字符拷贝,直到读到源字符串的结束符'\0'为止
    while (*buffer_ptr != '\0')
    {
        // 将源指针当前指向的字符,写入目标指针当前指向的内存位置
        *copy_ptr = *buffer_ptr;
        // 两个指针同时向后移动1个字节,指向下一个待处理的字符
        buffer_ptr++;
        copy_ptr++;
    }
    // 手动给目标字符串补上结束符,避免字符串输出时越界
    *copy_ptr = '\0';

    // 直接传入目标数组起始地址(或指向起始位置的指针)即可输出结果
    puts(copy);
    return 0;
}

核心注意点:操作指针指向的内存内容时必须加解引用符*,不加*时操作的是指针本身存储的地址值,不是内存中存储的数据。

内容的提问来源于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 04:30:54