分解一个字符串转换成小块的sscanf和托架使用

问题描述 投票:0回答:1

我必须失去了一些东西很简单,但我没有线索。运行之后:

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的。

第一个字符串无法正确读取。

c scanf brackets
1个回答
1
投票

通过编写“7.3”它(因为这是choixReq,4个字符)溢出'7', '.', '3', '\0'

如果我改变choixReq持有4个字符,而不是,我得到正确的输出:

codeuser 205
choix 7.3
donnee data data
© www.soinside.com 2019 - 2024. All rights reserved.