对于在C++中何时使用字符串(char)和何时使用字符串指针(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 == "\"") {...}发布于 2009-10-11 16:37:48
没有一个是正确的。
成员函数sub不存在字符串,除非您使用的是另一个不是std::string的string类。
第一个问题中的第二个subString = &anotherString.sub(9);是不安全的,因为您正在存储一个临时地址。这也是错误的,因为anotherString是指向字符串对象的指针。要调用sub成员函数,需要编写anotherString->sub(9)。此外,成员函数sub也不存在。
第二个问题中的第一个问题比第二个问题更正确;您所需要做的就是将"\""替换为'\"'。
第二个问题中的第二个问题是错误的,因为:
doubleQuote并不是指第10个字符,而是指从第10个字符开始的字符串。doubleQuote == "\""可能在类型上是正确的,但它不会比较这两个字符串的相等性;它会检查它们是否指向相同的事物。如果要检查两个字符串的相等性,请使用抽筋。发布于 2009-10-11 17:11:10
在C++中,您可以(而且应该)始终使用std::string (同时记住字符串文本实际上是以零结尾的字符数组)。只在需要与C代码接口时才使用char*。
C风格的字符串需要容易出错的手动内存管理,需要显式地复制字符串(复制指针不复制字符串),并且您需要注意诸如分配足够的内存以使终止的'\0'适应进来等细节,而std::string则自动处理所有这些问题。
发布于 2009-10-11 16:38:15
对于第一个问题,第一个示例,假设sub将返回提供的字符串的子字符串。
对于第二种情况,没有:
char doubleQuote = aString[9];
if( doubleQuote == '\"') { ... }https://stackoverflow.com/questions/1551106
复制相似问题