用 strtok 将字符串拆分为双指针
splitting string with strtok to double pointer
char **params;
for (int i = 0; i < 100; i++) {
params++ = NULL;
}
int i = 0;
char* parn = strtok(all_p, " ");
while (parn != NULL) {
params++ = parn;
parn = strtok(NULL, " ");
}
for (int i = 0; params[i] !=NULL; i++) {
printf("--%s--\n", *params);
}
我只是想在拆分 string/char 数组后创建一个双指针,其中有 space.
但是它在编译期间给我一个错误:error: expression is not assignable
。关于 NULL
和 parn
赋值。我该如何解决?
++
运算符产生一个 rvalue 这大致意味着它只能出现在赋值的右侧,即你不能赋值给该运算符的结果.
看起来您真正想要的不是分配给 params
,而是分配给 params
指向的内容。因此,您需要取消引用 ++
的结果,并且您 可以 分配给:
*(params++)=parn;
但是您在如何使用 params
方面还有另一个问题。首先,由于 params
尚未初始化,尝试取消引用它(包括数组索引)将触发 undefined behavior 并导致崩溃。其次,您多次迭代 params
而没有将其重置回开头。
您可以通过将 params
定义为指针数组而不是指向指针的指针来解决此问题,然后在分配给它们时使用临时指针遍历其元素。
char * params[100] = {
NULL
}; // initializes all element to NULL
char ** tmp = params;
char * parn = strtok(all_p, " ");
while (parn != NULL) {
*(tmp++) = parn;
parn = strtok(NULL, " ");
}
for (int i = 0; params[i] != NULL; i++) {
printf("--%s--\n", params[i]);
}
char **params;
for (int i = 0; i < 100; i++) {
params++ = NULL;
}
int i = 0;
char* parn = strtok(all_p, " ");
while (parn != NULL) {
params++ = parn;
parn = strtok(NULL, " ");
}
for (int i = 0; params[i] !=NULL; i++) {
printf("--%s--\n", *params);
}
我只是想在拆分 string/char 数组后创建一个双指针,其中有 space.
但是它在编译期间给我一个错误:error: expression is not assignable
。关于 NULL
和 parn
赋值。我该如何解决?
++
运算符产生一个 rvalue 这大致意味着它只能出现在赋值的右侧,即你不能赋值给该运算符的结果.
看起来您真正想要的不是分配给 params
,而是分配给 params
指向的内容。因此,您需要取消引用 ++
的结果,并且您 可以 分配给:
*(params++)=parn;
但是您在如何使用 params
方面还有另一个问题。首先,由于 params
尚未初始化,尝试取消引用它(包括数组索引)将触发 undefined behavior 并导致崩溃。其次,您多次迭代 params
而没有将其重置回开头。
您可以通过将 params
定义为指针数组而不是指向指针的指针来解决此问题,然后在分配给它们时使用临时指针遍历其元素。
char * params[100] = {
NULL
}; // initializes all element to NULL
char ** tmp = params;
char * parn = strtok(all_p, " ");
while (parn != NULL) {
*(tmp++) = parn;
parn = strtok(NULL, " ");
}
for (int i = 0; params[i] != NULL; i++) {
printf("--%s--\n", params[i]);
}