“可能在此函数中未初始化地使用”如何删除此警告?

0 c stm32

我将使用 strtok“#”分隔数据,数据类似于“157#178#666#...”-ish。我知道还有另一种方法可以解析它,但我不知道如何。这是我的代码

HAL_UART_Receive_DMA(&huart1, (uint8_t*)dataB,77);

  char *delim="A";
    char *b,*c,*d,*e,*f,*g,*h,*i,*j,*k,*l,*m,*n,*o,*p,*q,*r,*s;
    char *sampah =dataB;
    char *a=strtok(sampah,delim);

    if (a != NULL) {
      b = strtok(NULL, delim);
      if (b != NULL) {
        c = strtok(NULL, delim);
        if (c != NULL) {
          d = strtok(NULL, delim);
          if (d != NULL) {
            e = strtok(NULL, delim);
            if (e != NULL) {
              f = strtok(NULL, delim);
              if (f != NULL) {
                g = strtok(NULL, delim);
                if (g != NULL) {
                  h = strtok(NULL, delim);
                  if (h != NULL) {
                    i = strtok(NULL, delim);
                    if (i != NULL) {
                      j = strtok(NULL, delim);
                      if (j != NULL) {
                        k = strtok(NULL, delim);
                        if (k != NULL) {
                          l = strtok(NULL, delim);
                          if (l != NULL) {
                            m = strtok(NULL, delim);
                            if (m != NULL) {
                              n = strtok(NULL, delim);
                              if (n != NULL) {
                                o = strtok(NULL, delim);
                                if (o != NULL) {
                                  p = strtok(NULL, delim);
                                  if (p != NULL) {
                                    q = strtok(NULL, delim);
                                    if (q != NULL) {
                                      r = strtok(NULL, delim);
                                      if (r != NULL) {
                                        s = strtok(NULL, delim);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

当我使用 b 时,它说 '*b' 可能在此函数中未初始化地使用

有人可以帮我弄这个吗?

小智 6

您收到的有关可能未初始化的警告*b是由于语句的嵌套结构造成的,如果不满足某些条件,if这可能会导致并非所有变量(bc、 、 ...)都被赋值。当return且后续变量未分配任何值时,d可能会发生这种情况。strtokNULL

实现您想要的效果的一种更简洁的方法是声明一个指针数组并使用循环遍历它们,如下所示;

    char *delim = "#";
    char *tokens[20];  // adjust the size as needed

    char *token = strtok(dataB, delim);
    int tokenCount = 0;

    while (token != NULL && tokenCount < 20) {
        tokens[tokenCount] = token;
        token = strtok(NULL, delim);
        tokenCount++;
    }
    // Now tokens[0] contains "157", tokens[1] contains "178", and so on...
Run Code Online (Sandbox Code Playgroud)