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

时间:2019-02-08 17:40:33

标签: c scanf brackets

我一定很想念一些简单的东西,但是我没有任何线索。 运行此命令后:

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上无效。

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

1 个答案:

答案 0 :(得分:1)

通过向其写入“ 7.3”(choixReq,四个字符)使'7', '.', '3', '\0'溢出。

如果我将choixReq改为保留4个字符,则会得到正确的输出:

codeuser 205
choix 7.3
donnee data data