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

如何在C语言中用指针反转字符串(禁用数组表示与字符串库函数)

用指针反转C字符串(无数组表示法/字符串库函数)

我来帮你搞定这个问题,完全符合你要求的不使用数组表示法、不调用字符串库函数的规则。先给你补全并优化后的完整可运行代码,再一步步拆解关键细节:

#include <stdio.h>
#include <stdlib.h>

// 提前声明函数,避免编译时隐式声明报错
void reverse2(char *string, char *string2);

int main(void) {
    char *forward = "123";
    // 分配足够内存存储反转后的字符串(3个字符+1个终止符,共4字节)
    char *back = malloc(sizeof(char) * 4);
    if (back == NULL) { // 必须检查内存分配是否成功,避免崩溃
        fprintf(stderr, "内存分配失败!\n");
        return 1;
    }
    
    reverse2(forward, back);
    printf("原字符串:%s\n反转后:%s\n", forward, back);
    
    free(back); // 用完动态分配的内存记得释放,避免泄漏
    return 0;
}

void reverse2(char *string, char *string2) {
    char *string1 = string;
    // 第一步:移动指针到字符串末尾(找到'\0'的位置)
    while (*string1) {
        string1++;
    }
    string1--; // 现在string1指向原字符串的最后一个有效字符(比如"123"里的'3')
    
    char *dest = string2; // 用dest跟踪目标字符串的当前写入位置
    // 第二步:从后往前逐个复制字符
    while (string1 >= string) {
        *dest = *string1;
        dest++;
        string1--;
    }
    *dest = '\0'; // 关键!C字符串必须以'\0'结尾,否则会出现乱码
}

关键细节说明

  • 函数声明:在main之前声明reverse2,否则编译器会因为找不到函数定义而报错。
  • 内存安全:永远要检查malloc的返回值,如果内存分配失败,直接终止程序避免后续非法操作。
  • 纯指针操作:
    • 通过while (*string1)判断是否到达字符串末尾(因为C字符串以'\0'结尾,此时*string1的值为0,循环终止)。
    • 用string1 >= string作为循环条件,直接通过指针位置判断是否复制完所有字符,完全不需要额外的计数器变量。
  • 字符串终止符:最后一定要给目标字符串加上'\0',否则printf会读取内存中的垃圾数据,导致输出乱码。
  • 内存释放:动态分配的内存使用完毕后必须用free释放,避免内存泄漏。

如果你想保留你原来的计数器思路,也可以这样实现reverse2:

void reverse2(char *string, char *string2) {
    int counter = 0;
    char *string1 = string;
    // 计算字符串长度
    while (*string1) {
        counter++;
        string1++;
    }
    string1--; // 指向最后一个有效字符
    
    char *dest = string2;
    // 按计数器循环复制
    for (int i = 0; i < counter; i++) {
        *dest = *string1;
        dest++;
        string1--;
    }
    *dest = '\0';
}

两种写法都完全符合你的要求,选你觉得更易读的就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:29