【问题标题】:How can I change the character a string pointer points to?如何更改字符串指针指向的字符?
【发布时间】:2016-04-04 14:39:53
【问题描述】:

理论上很简单:

如果我有一个字符串动物 = "Boar";

如何将动物指向'O'

我试过这个:

int main(int argc, char** argv) {

    string *spoint = new string;
    string word = "Hello";
    spoint = &word;
    spoint++;
    cout << (*spoint);

    return 0;
}

它不起作用。

我想让cout &lt;&lt; word;先打印"Word",如果那是字指向的字符串,然后运行一个操作,所以cout &lt;&lt; word;会打印"ord"

一定有简单的方法?

【问题讨论】:

  • 你认为 spoint++ 做了什么?
  • 也许你想使用c_str机制?
  • 附带说明:您那里有内存泄漏。您分配了一个字符串,然后继续丢失指针,因此无法free 其内存。

标签: c++ string pointers


【解决方案1】:

我认为您缺少一些基本的指针算法。让我们使用以下代码 sn-p:

 int* spoint;
 spoint++;

如果spoint指向一个地址为1000int,那么经过上述操作,spoint会指向当前位置旁边的sizeof(int)字节,因为下一个int将在1000 + sizeof(int) 可用。此操作会将指针移动到下一个内存位置1004(如果int 的大小为4 字节),而不会影响内存位置的实际值。

字符串也是如此。

string word[] = {"Hello","world"};
string* spoint = word;
spoint++;

spoint++ 之后,spoint 将指向"world" 而不是"Hello" 的字符e,这就是您没有正确输出的原因。如果您想访问字符串,您应该使用其他人提到的char*

首先您必须将word 转换为C 字符串(以null 结尾的字符序列),同时将其分配给char*,然后您可以递增它以访问字符.

string word = "word";
const char *spoint = word.c_str();
spoint++;
cout <<spoint<<endl;

现在spoint 将在递增后指向"word"'o',如果您使用cout 打印它,那么输出将是"ord"

【讨论】:

  • 太棒了,谢谢拉吉夫。我没有足够的代表来支持你,但这就是答案。谢谢!
【解决方案2】:

我觉得您将 char * 与 C++ string 对象混淆了。

通过同时使用这两种方法,您可以获得与您所要求的类似的东西——尽管我不确定这是否是您真正想要的

int main(int argc, char** argv) {

    string word = "Hello";
    const char* spoint = word.c_str()
    spoint++;
    cout << (*spoint);

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2011-04-12
    相关资源
    最近更新 更多