C++ 在数组中存储指针

C++ 在数组中存储指针,c++,variables,pointers,strtok,C++,Variables,Pointers,Strtok,我使用strtok标记数组。我想将strtok返回的char指针存储到一个数组中 char exp[] = {"1000 + 1000"}; char operands[50]; p = strtok(exp, " "); 现在我想将p的值(即1000)存储到操作数[I]数组中。我这样试过: memcpy(&operands[i], p, 49); 但是它只复制一个整数。我猜您实际上不想将p指向的字符串复制到字符数组操作数中。相反,在我看来,您希望操作数成为指向字符的指针

我使用
strtok
标记数组。我想将strtok返回的char指针存储到一个数组中

  char exp[] = {"1000 + 1000"};
  char operands[50];
  p = strtok(exp, " ");
现在我想将p的值(即1000)存储到操作数[I]数组中。我这样试过:

memcpy(&operands[i], p, 49);

但是它只复制一个整数。

我猜您实际上不想将
p
指向的字符串复制到字符数组
操作数中。相反,在我看来,您希望
操作数
成为指向
字符
的指针数组,即

char *operands[50];
那你就做吧

operands[i] = p;
(注意:
i
必须是一个有效索引,范围为0。) 运行上述代码后,在char数组操作数中

前5个是赋值

操作数[0]=“1”操作数[1]=“0”操作数[2]=“0”操作数[3]=“0” 操作数[4]=0//字符数组的结束字符

其他未分配值“?”

操作数[i]=“?”


这真的是C++吗?为什么49是MeMCPY的最后一个ARG?<代码> StrcPy(操作数,p)< /C> >代码> STD::String < /Cord>是你的朋友。“但是它只复制一个整数。”——这就是“代码”Strtok < /Cuff>在第一个令牌之后,将一个NUL字符放进<代码> EXP[] /CUD>,这样你的代码> MeMCPY >(其行为未定义,因为49远大于exp的大小)复制“1000\0+1000\0”还有大约40个其他垃圾字符。听一下Bathsjeba——如果你使用
std::string
,你就不太可能出错,如果你这样做,你就更有可能得到错误的字符串输出,而不是破坏你的程序。我开始用c编程,所以我仍然使用c函数。(我看到了49,但在这种情况下不会有什么不同。)
std::vector<std::string> operands;

...

operands.push_back(p);
char exp[] = {"1000 + 1000"};
char operand[50];
char* p = strtok(exp, " ");
memcpy(&operand[0], p, 5);