在 C 中迭代字符串列表,出了什么问题?

发布于 2024-12-08 10:20:55 字数 282 浏览 1 评论 0原文

我试图打印出一个字符串列表:

std::list<String> const &prms = (*iter)->getParams();
std::list<String>::const_iterator i;
for(i = prms.begin(); i != prms.end(); ++i){
  log.debug("  Param: %s",*i);
}

但是我的程序崩溃了,并显示非法指令。我做错了什么?

I'm trying to print out a list of strings thus:

std::list<String> const &prms = (*iter)->getParams();
std::list<String>::const_iterator i;
for(i = prms.begin(); i != prms.end(); ++i){
  log.debug("  Param: %s",*i);
}

But my program crashes saying Illegal Instruction. What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终难遇 2024-12-15 10:20:55

*iString,而不是 char *。如果 log.debug()printf 系列的函数,则您需要一个以零结尾的字符串。根据 String 类的实现方式,您可能有一个返回 const char * 的函数。

例如,使用 std::string 时,该函数为 c_str

for(std::list<std::string>::const_iterator i = my_list.begin(); i != my_list.end(); ++i)
{
     printf("%s\n", i->c_str());
}

*i is a String, not a char *. If log.debug() is a function of the printf family, you want a zero-terminated string. Depending on how your String class is implemented you might have a function that returns a const char *.

For example with std::string that function is c_str:

for(std::list<std::string>::const_iterator i = my_list.begin(); i != my_list.end(); ++i)
{
     printf("%s\n", i->c_str());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文