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

时间:2009-10-11 16:31:19

标签: c++ string pointers reference char

我很困惑何时使用string(char)以及何时在C ++中使用字符串指针(char指针)。这是我有两个问题。 以下哪两个是正确的?

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

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

以下哪两个是正确的?

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

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

4 个答案:

答案 0 :(得分:4)

它们都不正确。

对于字符串,成员函数sub不存在,除非您使用的是非string的其他std::string类。

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

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

第二个问题的第二个问题是错误的,如:

  1. doubleQuote不是指第10个字符,而是第10个字符后面的字符串
  2. doubleQuote == "\""可能是类型正确的,但它不会比较两个字符串的相等性;它检查他们是否指向同一件事。如果要检查两个字符串的相等性,请使用strcmp

答案 1 :(得分:3)

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

C风格的字符串需要容易出错的手动内存管理,需要显式复制字符串(复制指针不复制字符串),并且需要注意细节,例如分配足够的内存来终止{{1适应,而'\0'自动处理所有这些。

答案 2 :(得分:0)

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

对于第二个,没有:

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

答案 3 :(得分:0)

呃,你在使用STL的字符串吗?

(即你有类似

的东西
#include <string>
#using namespace std;

在源文件的开头;))

那就像

string mystring("whatever:\"\""");
char anElem = mystring[9];
if (anElem=="\"") { do_something();}

或者你可以写

mystring.at(9)

而不是方括号。

可能有these个例子可以提供帮助。