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

