-1
1.  vector<string> cmdv=explode(" ","i am a string");
2.  std::string arg;
3.  char * args[10];
4.  for (i = 0; i < cmdv.size(); i++) {
5.      arg = std::string(cmdv[i]);
6.      if (cmdv[i][0] == '"') {
7.          //do some thing
8.      }
9.      args[i] = arg.c_str();;
10. }
11. args[i]='\0';

我期望数组的内容,args{"i","am","a","string"}数组args{"am","a","string","string"}

在调试时,我发现在第 6 行中的if子句 when cmdv[i][0]is compare with '"'args[i-1]被替换为arg. 我一头雾水!

功能没有问题explode。它的工作很好。

4

1 回答 1

2

这是个问题 :-

args[i] = arg.c_str();

this 返回的指针仅在 arg 包含它的值时才有效,并且您每次通过循环都更改 arg 。如果要存储指向字符串的 C 样式指针,则需要对其进行复制,可能类似于:-

args[i] = strdup(arg.c_str());

但记得释放它。另外,可能有比使用 C 风格字符串更好的方法来实现你想要的东西

于 2013-07-10T08:20:26.003 回答