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

如何在C语言中将const char*字符串的最后2个字符保存到char*变量

解决C语言中复制const字符串最后两个字符到char*的问题

核心问题分析

  1. 编译错误原因:直接将const char*类型指针赋值给char*,丢弃了const限定符。编译器禁止这种操作,防止通过非const指针修改被const保护的内存区域。
  2. 内存访问错误:main函数中buf被初始化为NULL,未分配足够内存存储结果(至少需要3字节:2个字符+字符串终止符'\0'),会导致strcpy访问非法内存,触发未定义行为。
  3. 语法错误:for循环的条件表达式写法错误(用逗号代替分号,缺少闭合括号)。

修正后的代码

1. 修正lasttwo函数

#include <string.h>
#include <stdio.h>

int lasttwo(const char *input, char *last) {
    size_t len = strlen(input);
    if (len < 2) {
        // 处理输入长度不足2的情况:复制整个字符串
        strcpy(last, input);
    } else {
        // 复制最后两个字符(strcpy会自动包含终止符)
        strcpy(last, input + len - 2);
    }
    return 0;
}

2. 修正main函数

int main(int argc, const char *argv[]) {
    for (int i = 1; i < argc; i++) {
        char buf[3]; // 分配足够内存存储两个字符+终止符
        lasttwo(argv[i], buf);
        printf("last two letters of '%s' is '%s'\n", argv[i], buf);
    }
    return 0;
}

关键说明

  • 使用strcpy而非指针赋值:strcpy的参数类型是char* dest和const char* src,完全符合类型要求——它只读取const源字符串的内容,写入到非const的目标缓冲区,不会触发限定符丢弃的错误。
  • 边界处理:增加了对输入字符串长度小于2的判断,避免访问越界。
  • 内存分配:在栈上声明char buf[3],确保有足够空间存储结果,无需手动释放内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:21