【问题标题】:C++ Passing C-style string as argumentC++ 将 C 风格的字符串作为参数传递
【发布时间】:2012-05-06 15:19:49
【问题描述】:

我在处理 C++ 中的 C 风格字符串时遇到了一些麻烦。简而言之,我要做的是将我的 main 方法中的 cstring 传递给我的一个对象的构造函数。

例如

class sample
{
  public: // Initalization
  Sample( const char * inFile);
}//End sample class

然后在main方法中。

//Main method
int main ( int argc, const char * argv[] )
{
   Sample aSample(argv[1]);
}

现在,根据我的假设,当我使用 argv[1] 取消引用第二个指针时,我应该得到一个 const char*。据我了解,char *argv[] 只是 char **argv 的另一种说法。

另外,为了确保我对 const 的理解是正确的,const char * 说“这个指针指向一个 const char”,而 const char const * 说“这个指针地址不能改变,它指向的地址to 也是 const”。

更新-

只是为了澄清这是一个两部分的问题。

  1. 如果示例中的构造函数对于传递 cstring 不正确,我该如何更正?
  2. 对 const 的理解

更新了我上面的错误陈述,即当它应该是“第二个”时,我取消了“第一个”指针的引用。感谢您在下面指出这一点。

第二次更新 - 我使用 argv[1] 是因为我从命令行接收信息,而 argv[0] 仅包含我不感兴趣的可执行文件的路径。

非常感谢任何帮助。

-弗莱迪

【问题讨论】:

  • 是的,我收到一个错误,即我试图调用的构造函数的符号未定义。 "Simple::Simple(char const*),引用自:unit.o 中的_Main 这就是为什么我问我对const 的理解是正确的。我认为我的论点的接口可能不正确。
  • 啊——好吧,这只是意味着你还没有定义示例构造函数应该做什么。你已经声明了它,但没有定义它。
  • 我开始认为这可能是我正在使用的 IDE 的问题。我试图清理和重建,但我已经在我的 .cpp 文件中完全定义了构造函数。
  • 您有多个 .cpp 文件吗?
  • 看起来像是链接器错误,而不是编译器错误。

标签: c++ pointers


【解决方案1】:

argv[1] 取消引用第二个指针,而不是第一个。你想要argv[0]。 C++ 中的数组是 基于 0 的

还有:

const char const *

不合法(感谢 Benjamin 指出)。在这种情况下,consts 都应用于char。如果您希望指针为 const,则需要

char const * const

const char * const

编辑:

问题 1) CString 可以将char* 作为构造函数的参数,所以它应该可以工作。

问题 2) const 绑定到左侧,除非左侧没有任何内容。所以const charchar const 是一样的。对于 const 指针,您需要 * const,而不是 const *

【讨论】:

  • "argv[1] 取消引用第一个指针,而不是第二个" -- 你没有倒过来吗?另外,const char const * 是多余的。
  • 感谢 Luchian 纠正我的 const 指针信息。但是,在 c++ 中,argv[0] 不是可执行文件的路径吗?在我的主要内容中,如果我打印 argv[1],它将打印在命令行中传递的正确信息。
  • @Freddy 好吧,你说“当我使用 argv[1] 取消引用第一个指针时”,这是一个错误。
  • 除了冗余之外,这也是一个错误,但你的回答说这是一个有效的声明(这就是我指出的原因)
猜你喜欢
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2010-10-03
  • 2011-05-14
  • 1970-01-01
相关资源
最近更新 更多