首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回带有向量的std::string

返回带有向量的std::string
EN

Stack Overflow用户
提问于 2010-07-31 06:06:29
回答 4查看 864关注 0票数 0

我试图让"CMtoaPlugin::listArnoldNodes()“返回一个字符串数组

代码语言:javascript
复制
   std::vector<std::string> ArnoldNodes = CMtoaPlugin::listArnoldNodes();
   std::vector<std::string>::iterator it;

   for ( it=ArnoldNodes.begin() ; it < ArnoldNodes.end(); it++ )
   {
      printf("initialize shader %s\n", *it);
   }

但这是我得到的,2个条目,这是正确的,但条目的内容不是

初始化阿诺德着色器†.../

初始化Arnold着色器。

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-31 06:17:27

像这样试一下:

代码语言:javascript
复制
for (it = ArnoldNodes.begin() ; it != ArnoldNodes.end(); ++it)
{
    std::cout << "initialize shader " << *it << std::endl;
}

  • printf不适用于std::string,您需要使用cout (或将其传递给迭代器it->c_str())
  • In -std::string),最好使用it != vec.end() (因为您只需要检查相等性,而不是比较)和++it来递增(对于某些迭代器,后递增可能效率较低)。
票数 4
EN

Stack Overflow用户

发布于 2010-07-31 06:10:53

不能使用printf (或任何varargs方法)打印std::string。g++在这里给出一个警告:

代码语言:javascript
复制
warning: cannot pass objects of non-POD type ‘struct std::string’ through ‘...’; call will abort at runtime

只需使用cout:

代码语言:javascript
复制
std::cout << "initialize shader " << *it << std::endl;
票数 7
EN

Stack Overflow用户

发布于 2010-07-31 06:13:57

另一种可能是使用printf打印与std::string对应的C字符串,如下所示:

代码语言:javascript
复制
 printf("initialize shader %s\n", it->c_str());
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3375710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档