首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中使用字符串和字符串指针

如何在C++中使用字符串和字符串指针
EN

Stack Overflow用户
提问于 2009-10-11 16:31:19
回答 4查看 10.5K关注 0票数 0

对于在C++中何时使用字符串(char)和何时使用字符串指针(char指针),我感到非常困惑。我有两个问题要问。以下哪一个是正确的?

代码语言:javascript
复制
string subString;
subString = anotherString.sub(9);

string *subString;
subString = &anotherString.sub(9);

以下哪一个是正确的?

代码语言:javascript
复制
char doubleQuote = aString[9];
if (doubleQuote == "\"") {...}

char *doubleQuote = &aString[9];
if (doubleQuote == "\"") {...}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-11 16:37:48

没有一个是正确的。

成员函数sub不存在字符串,除非您使用的是另一个不是std::stringstring类。

第一个问题中的第二个subString = &anotherString.sub(9);是不安全的,因为您正在存储一个临时地址。这也是错误的,因为anotherString是指向字符串对象的指针。要调用sub成员函数,需要编写anotherString->sub(9)。此外,成员函数sub也不存在。

第二个问题中的第一个问题比第二个问题更正确;您所需要做的就是将"\""替换为'\"'

第二个问题中的第二个问题是错误的,因为:

  1. doubleQuote并不是指第10个字符,而是指从第10个字符开始的字符串。
  2. doubleQuote == "\""可能在类型上是正确的,但它不会比较这两个字符串的相等性;它会检查它们是否指向相同的事物。如果要检查两个字符串的相等性,请使用抽筋
票数 4
EN

Stack Overflow用户

发布于 2009-10-11 17:11:10

在C++中,您可以(而且应该)始终使用std::string (同时记住字符串文本实际上是以零结尾的字符数组)。只在需要与C代码接口时才使用char*

C风格的字符串需要容易出错的手动内存管理,需要显式地复制字符串(复制指针不复制字符串),并且您需要注意诸如分配足够的内存以使终止的'\0'适应进来等细节,而std::string则自动处理所有这些问题。

票数 3
EN

Stack Overflow用户

发布于 2009-10-11 16:38:15

对于第一个问题,第一个示例,假设sub将返回提供的字符串的子字符串。

对于第二种情况,没有:

代码语言:javascript
复制
char doubleQuote = aString[9];
if( doubleQuote == '\"') { ... }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1551106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档