用 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。关于 NULLparn 赋值。我该如何解决?

++ 运算符产生一个 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]);
}