如何在C++; 我很困惑何时使用字符串(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 == "\"") {...}
以下两项中哪一项是正确的如何在C++; 我很困惑何时使用字符串(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 == "\"") {...},c++,string,pointers,reference,char,C++,String,Pointers,Reference,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 == "\"")
string subString;
subString = anotherString.sub(9);
string *subString;
subString = &anotherString.sub(9);
char doubleQuote = aString[9];
if (doubleQuote == "\"") {...}
char *doubleQuote = &aString[9];
if (doubleQuote == "\"") {...}
没有一个是正确的 字符串的成员函数
sub
不存在,除非您使用的是另一个string
类不是std::string
第一个问题的第二个问题subString=&anotherString.sub(9)
不安全,因为您正在存储临时用户的地址。这也是错误的,因为另一个字符串是指向字符串对象的指针。要调用sub
成员函数,您需要编写另一个字符串->sub(9)
。同样,成员函数sub
不存在
第二个问题的第一个比第二个更正确;您只需将“\”
替换为“\”
第二个问题的第二个是错误的,因为:
doubleQuote
不是指第10个字符,而是指从第10个字符开始的字符串doubleQuote==“\”
可能是类型正确的,但它不会比较两个字符串的相等性;它会检查它们是否指向同一对象。如果要检查两个字符串的相等性,请使用对于第一个问题,假设sub将返回所提供字符串的子字符串,则为第一个示例 第二,无:
char doubleQuote = aString[9];
if( doubleQuote == '\"') { ... }
呃,您使用的是STL中的字符串吗 (也就是说,你有
#include <string>
#using namespace std;
或者你可以写
mystring.at(9)
而不是方括号
在C++中,你可以(也应该)总是使用<代码> STD::String (记住字符串文本实际上是零终止字符数组)。只有当你需要与C代码接口时,才使用<代码> char */COD>。
C风格的字符串需要易于出错的手动内存管理,需要显式复制字符串(复制指针不会复制字符串),您需要注意一些细节,例如分配足够的内存以容纳终止的
'\0'
,而std::string
自动处理所有这些。std::string
不属于STL.Oh和mystring[9]中的std lib部分
也可以工作。只是std::string::at()
检查它的参数,而std::string::operator[]()
则不检查。这取决于您需要什么。