我很困惑何时使用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 == "\"") {...}
答案 0 :(得分:4)
它们都不正确。
对于字符串,成员函数sub
不存在,除非您使用的是非string
的其他std::string
类。
第一个问题subString = &anotherString.sub(9);
中的第二个问题并不安全,因为您正在存储临时问题的地址。这也是错误的,因为anotherString
是指向字符串对象的指针。要调用sub
成员函数,您需要编写anotherString->sub(9)
。同样,成员函数sub
不存在。
第二个问题的第一个问题比第二个问题更正确;您需要做的就是将"\""
替换为'\"'
。
第二个问题的第二个问题是错误的,如:
doubleQuote
不是指第10个字符,而是第10个字符后面的字符串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个例子可以提供帮助。