Sscanf с двоеточием - PullRequest
       14

Sscanf с двоеточием

0 голосов
/ 18 сентября 2018

Я новичок в программировании на C.Я хочу извлечь значения из строки входного буфера.Я видел пару примеров для sscanf, и он работает с разделителем пробелов, но не работает с двоеточиями или запятыми.

Я пытался использовать некоторые регулярные выражения в sscanf, но, похоже, не работает.

#include <stdio.h>

int main() {

char buffer[] = "T:192.164.7.1:22:user:pass:empty:test.txt";
char cmdChar;
char ipAddress[100];
int port;
char username[100];
char password[100];
char folder[100];
char fileName[100];
char fileExtension[100];

sscanf(buffer, "%1c:%[^:]%d:%s:%s:%s:%s.%s", cmdChar, ipAddress, &port, username, password, folder, fileName, fileExtension);
printf("%c \n\n", cmdChar);

}

Пытался напечатать первый символ cmdChar, но он возвращается как NULL.Может кто-нибудь указать мне, что я делаю неправильно.Спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

Я вижу пару проблем с вашим форматом:

  • "%[^:]%d" - первая часть будет читаться до тех пор, пока не попадет в двоеточие, но не будет читать само двоеточие,это означает, что следующее целое число не будет прочитано правильно, а остальная часть строки будет проанализирована неправильно (если вообще).Вам нужно "%[^:]:%d".

  • "%s.%s" для строки "test.txt".Формат %s считывает строку , разделенную пробелом *1015*, что означает, что первая "%s" будет читать все "test.txt" в fileName.Если вы хотите разделить на имя и суффикс, вам нужно использовать формат %[ как int "%[^.].%s".

. Как уже упоминалось в комментарии, вам нужно передать указатель наcmdChar.

...