使用 strtok 将字符串拆分为双指针

Mai*_*sad 1 c strtok

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);
}
Run Code Online (Sandbox Code Playgroud)

我只是想在分割字符串/字符数组后创建一个双指针,其中有空间。

但在编译过程中它给了我一个错误:error: expression is not assignable。关于喜欢NULLparn任务。我该如何解决这个问题?

dbu*_*ush 5

++运算符产生一个右值,这大致意味着它只能出现在赋值的右侧,即您不能分配给该运算符的结果。

看来您真正想要的不是分配给什么,params而是params分配给什么。因此,您需要取消引用 , 的结果++,并且可以将其分配给:

*(params++)=parn;
Run Code Online (Sandbox Code Playgroud)

但是,您还有另一个问题,即如何使用params. 首先,由于params尚未初始化,尝试取消引用它(包括数组索引)将触发未定义的行为并导致崩溃。其次,您迭代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]);
}
Run Code Online (Sandbox Code Playgroud)