我在处理c ++中的C风格字符串时遇到了一些麻烦。简而言之,我要做的是将我的main方法中的cstring传递给我的一个对象的构造函数。
例如
class sample
{
public: // Initalization
Sample( const char * inFile);
}//End sample class
然后在主要方法中。
//Main method
int main ( int argc, const char * argv[] )
{
Sample aSample(argv[1]);
}
现在,基于我的假设,当我使用const char*
取消引用第二个指针时,我应该返回argv[1]
。根据我的理解char *argv[]
只是另一种说法**argv
的方式。
另外,为了确保我对const的理解是正确的,const char *
说“这个指针指向一个const char”,其中const char const *
说“这个指针地址不能改变,并且它指向的地址也是const“。
更新 -
只是为了澄清这是一个两部分问题。
更新了我上面的错误陈述,即当它应该是“第二个”时我取消引用“第一个”指针。谢谢你指出这一点。
第二次更新 - 我正在使用argv [1]因为我从命令行接收信息而argv [0]只保存可执行文件的路径,我对此不感兴趣。
非常感谢任何帮助。
-Freddy
答案 0 :(得分:3)
argv[1]
取消引用第二个指针,而不是第一个指针。你想要argv[0]
。 C ++中的数组是基于 0的。
此外:
const char const *
是不合法的(归功于本杰明的指出)。在这种情况下,const
都应用于char
。如果希望指针为const,则需要
char const * const
或
const char * const
编辑:
问题1)CString可以将char*
作为构造函数的参数,因此它应该可以工作。
问题2)const
绑定到左边,除非左边没有任何内容。因此const char
和char const
是相同的。对于const指针,您需要* const
,而不是const *
。