使用 sscanf 和括号使用将字符串分解成小块

decomposing a string into small pieces with sscanf and bracket use

我一定是遗漏了一些非常简单的东西,但我没有任何线索。 在 运行 这个之后:

int main() {
   char requete[] = {"205 7.3 data data\n"};
   char codeUserReq[9];
   char choixReq[3];
   char donneeReq[200];

   memset(codeUserReq, 0, 5);
   memset(choixReq, 0, 3);
   memset(donneeReq, 0, 200);

   sscanf(requete, "%s %s %[^\n]", codeUserReq, choixReq, donneeReq);
   printf("codeuser %s \n",codeUserReq);
   printf("choix %s \n",choixReq);
   printf("donnee %s \n",donneeReq);

我希望结果是:

codeuser 205
choix 7.3
donnee data data

相反,它是:

codeuser
choix 7.3
donnee data data

此代码在 ubuntu 上有效,但在 debian 上无效。

第一个字符串未正确读取。

您通过向 choixReq 写入“7.3”(因为那是 '7', '.', '3', '[=12=]',四个字符)溢出 choixReq

如果我将 choixReq 更改为包含 4 个字符,我会得到正确的输出:

codeuser 205
choix 7.3
donnee data data