разложение строки на маленькие кусочки с использованием sscanf и скобок - PullRequest
0 голосов
/ 08 февраля 2019

Я, должно быть, упускаю что-то очень простое, но у меня нет никаких подсказок.После запуска этого:

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 голосов
/ 08 февраля 2019

Вы переполняете choixReq, записывая в него «7.3» (так как это '7', '.', '3', '\0', четыре символа).

Если я изменю choixReq, чтобы вместо этого содержать 4 символа, я получу правильный вывод:

codeuser 205
choix 7.3
donnee data data
...