Я новичок в программировании на 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. Может кто-нибудь указать мне, что я делаю не так. Спасибо!
"%1c" бесполезен, так как char в любом случае состоит из одного символа. Предел имеет больше смысла для строк, чтобы предотвратить переполнение буфера.
[^:]%d будет читать, пока : и : не останутся в строке, поэтому ваш port будет иметь значение : ascii.





Я вижу пару проблем с вашим форматом:
"%[^:]%d" - первая часть будет считываться до тех пор, пока не достигнет двоеточия, но она не будет читать само двоеточие, что означает, что следующее целое число не будет прочитано правильно, а остальная часть строки будет проанализирована неправильно (если вообще будет). Вам нужен "%[^:]:%d".
"%s.%s" для строки "test.txt". Формат %s считывает строку ограниченное пространство, что означает, что первый "%s" будет считывать весь "test.txt" в fileName. Если вы хотите разделить на имя и суффикс, вам нужно использовать формат %[ как int "%[^.].%s".
И, как упоминалось в комментарии, вам нужно передать указатель на cmdChar.
: - это двоеточие, а не точка с запятой. точка с запятой - ;.
Вам нужно передать
&cmdCharвsscanf.