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);