c++ - 在 CPP 中通过指针传递字符串并获得意外输出

标签 c++

我试过这段代码,但我不明白为什么我得到的输出是“HL”而不是“Hl”。 有人请解释。

void t(string *s){
    s[1]='l';
}
int main(){
    string s = "HL";
    t(&s);
    cout<<s;
}

最佳答案

您现在拥有的是通过将不存在的字符串设置为等于 'l' 来更新它。这是未定义的行为。

失败的原因是您在索引指针时就好像它指向一个字符串数组(实际上它指向单个字符串)。您的意思是索引实际的字符串以获取它的字符。您必须首先像这样取消引用指针:

void t(string *s){
    (*s)[1]='l';
}
int main(){
    string s = "HL";
    t(&s);
    cout<<s;
}

See live on Coliru

如果您实际上使用了引用,就像您的标题所建议的那样,您不需要在语法方面做任何特殊的事情:

void t(string& s){
    s[1]='l';
}
int main(){
    string s = "HL";
    t(s);
    cout<<s;
}

See live on Coliru

关于c++ - 在 CPP 中通过指针传递字符串并获得意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576349/

相关文章:

c++ - rapidjson - 使用嵌套字段递归更改键值

c++ - 从文件中读取 GLSL 着色器

c++ - C++ 中的这种未定义行为是从悬空指针调用函数吗

c++ - 验证参数对于 gmock 中的多个预期调用具有相同的值

c++ - 如何同时应用RTP和UDP协议(protocol)来实现音频流?

c++检查函数在运行时是否重载

c++ - 如何用二进制流替换字符串流,以避免强制转换?

c++ - OpenGL统一标准缓冲区对齐困惑

c++ - Visual Studio 2010 中 unique_pointer 的奇怪行为

c++ - 函数指针中的参数列表