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
相关产品推荐
相关产品推荐

