• <i id='yZB5f'><tr id='yZB5f'><dt id='yZB5f'><q id='yZB5f'><span id='yZB5f'><b id='yZB5f'><form id='yZB5f'><ins id='yZB5f'></ins><ul id='yZB5f'></ul><sub id='yZB5f'></sub></form><legend id='yZB5f'></legend><bdo id='yZB5f'><pre id='yZB5f'><center id='yZB5f'></center></pre></bdo></b><th id='yZB5f'></th></span></q></dt></tr></i><div id='yZB5f'><tfoot id='yZB5f'></tfoot><dl id='yZB5f'><fieldset id='yZB5f'></fieldset></dl></div>
    • <bdo id='yZB5f'></bdo><ul id='yZB5f'></ul>

    1. <small id='yZB5f'></small><noframes id='yZB5f'>

    2. <legend id='yZB5f'><style id='yZB5f'><dir id='yZB5f'><q id='yZB5f'></q></dir></style></legend>
      1. <tfoot id='yZB5f'></tfoot>

        为什么我不能写入字符串文字而我*可以*写入字符串对象?

        Why can#39;t I write to a string literal while I *can* write to a string object?(为什么我不能写入字符串文字而我*可以*写入字符串对象?)

        1. <small id='rE4Bg'></small><noframes id='rE4Bg'>

          <i id='rE4Bg'><tr id='rE4Bg'><dt id='rE4Bg'><q id='rE4Bg'><span id='rE4Bg'><b id='rE4Bg'><form id='rE4Bg'><ins id='rE4Bg'></ins><ul id='rE4Bg'></ul><sub id='rE4Bg'></sub></form><legend id='rE4Bg'></legend><bdo id='rE4Bg'><pre id='rE4Bg'><center id='rE4Bg'></center></pre></bdo></b><th id='rE4Bg'></th></span></q></dt></tr></i><div id='rE4Bg'><tfoot id='rE4Bg'></tfoot><dl id='rE4Bg'><fieldset id='rE4Bg'></fieldset></dl></div>

              <legend id='rE4Bg'><style id='rE4Bg'><dir id='rE4Bg'><q id='rE4Bg'></q></dir></style></legend>
                <tbody id='rE4Bg'></tbody>
              <tfoot id='rE4Bg'></tfoot>
                  <bdo id='rE4Bg'></bdo><ul id='rE4Bg'></ul>

                • 本文介绍了为什么我不能写入字符串文字而我*可以*写入字符串对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  如果我定义如下,

                  char  *s1 = "Hello";
                  

                  为什么我不能做下面这样的事情,

                  why I can't do something like below,

                  *s1 = 'w'; // gives segmentation fault ...why???
                  

                  如果我执行以下操作会怎样,

                  What if I do something like below,

                  string s1 = "hello";
                  

                  我可以做类似下面的事情吗,

                  Can I do something like below,

                  *s1 = 'w'; 
                  

                  推荐答案

                  因为 "Hello" 创建了一个 const char[].这会衰减为 const char* 而不是 char*.在 C++ 中,字符串文字是只读的.您已经创建了一个指向此类文字的指针,并且正在尝试写入.

                  Because "Hello" creates a const char[]. This decays to a const char* not a char*. In C++ string literals are read-only. You've created a pointer to such a literal and are trying to write to it.

                  但是当你这样做时

                  string s1 = "hello";
                  

                  您将 const char* "hello" 复制到 s1 中.不同之处在于在第一个示例中 s1 指向 只读hello",而在第二个示例中只读hello"被复制到 非常量 s1,允许您访问复制的字符串中的元素以对它们执行您想要的操作.

                  You copy the const char* "hello" into s1. The difference being in the first example s1 points to read-only "hello" and in the second example read-only "hello" is copied into non-const s1, allowing you to access the elements in the copied string to do what you wish with them.

                  如果你想对 char* 做同样的事情,你需要为 char 数据分配空间并将 hello 复制到其中

                  If you want to do the same with a char* you need to allocate space for char data and copy hello into it

                  char hello[] = "hello"; // creates a char array big enough to hold "hello"
                  hello[0] = 'w';           //  writes to the 0th char in the array
                  

                  这篇关于为什么我不能写入字符串文字而我*可以*写入字符串对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  What is the past-the-end iterator in STL C++?(STL C++ 中的最后迭代器是什么?)
                  vector::at vs. vector::operator[](vector::at 与 vector::operator[])
                  C++ equivalent of StringBuffer/StringBuilder?(C++ 等效于 StringBuffer/StringBuilder?)
                  Adding types to the std namespace(将类型添加到 std 命名空间)
                  Is the C++ std::set thread-safe?(C++ std::set 线程安全吗?)
                  How to use std::find/std::find_if with a vector of custom class objects?(如何将 std::find/std::find_if 与自定义类对象的向量一起使用?)
                  <legend id='cM87J'><style id='cM87J'><dir id='cM87J'><q id='cM87J'></q></dir></style></legend>

                    <tfoot id='cM87J'></tfoot>

                      <small id='cM87J'></small><noframes id='cM87J'>

                      <i id='cM87J'><tr id='cM87J'><dt id='cM87J'><q id='cM87J'><span id='cM87J'><b id='cM87J'><form id='cM87J'><ins id='cM87J'></ins><ul id='cM87J'></ul><sub id='cM87J'></sub></form><legend id='cM87J'></legend><bdo id='cM87J'><pre id='cM87J'><center id='cM87J'></center></pre></bdo></b><th id='cM87J'></th></span></q></dt></tr></i><div id='cM87J'><tfoot id='cM87J'></tfoot><dl id='cM87J'><fieldset id='cM87J'></fieldset></dl></div>
                        <tbody id='cM87J'></tbody>
                        • <bdo id='cM87J'></bdo><ul id='cM87J'></ul>