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

C++如何获取字符串首尾字符并分别赋值给char类型指针

代码错误排查与正确实现

原代码存在3个核心语法和逻辑错误,逐一列示:

  • 类型不匹配错误:const char* Ptr = Str[0]; 赋值左右类型完全不兼容。Str[0]是字符串首个字符的值,类型为const char,不能直接赋值给指针类型的Ptr。要让Ptr指向首字符,直接将字符串首地址赋值即可,C风格字符串的变量名本身就指向首元素地址。
  • 非法调用错误:Ptr是原始const char*指针,不是std::string或STL容器类型,不存在back()成员方法,这行代码会直接触发编译报错。
  • 逻辑认知错误:原始C风格字符串不存储自身长度信息,无法直接通过指针调用方法拿到尾字符位置,必须手动计算偏移;另外直接对const char*类型的指针做cout输出时,程序会从指针指向的内存位置开始连续打印字符直到遇到'\0'结束符,不会只输出单个字符,要打印单个字符必须对指针做解引用。

正确实现代码(C原始字符串版本)

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    const char* Str = "Stackoverflow";
    // Ptr指向字符串首字符
    const char* Ptr = Str;
    // BufLim指向最后一个有效字符:首地址偏移 字符串长度-1 位(下标从0开始计数)
    // 如果需要指向字符串末尾的'\0'结束符,去掉-1即可:const char* BufLim = Str + strlen(Str);
    const char* BufLim = Str + strlen(Str) - 1;

    // 输出首字符开始的完整字符串
    cout << Ptr << endl;
    // 输出从尾字符开始到结束符的内容
    cout << BufLim << endl;
    // 单独输出首字符、尾字符需要解引用指针
    cout << "首字符:" << *Ptr << ",尾字符:" << *BufLim << endl;
    return 0;
}

更安全的std::string版本实现

如果不需要强制使用C风格原始字符串,用std::string管理字符串可以避免手动计算长度的错误,也支持直接调用back()方法取尾字符:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string Str = "Stackoverflow";
    const char* Ptr = &Str[0];
    const char* BufLim = &Str.back();

    cout << "首字符:" << *Ptr << ",尾字符:" << *BufLim << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:18:15