结肠扫描仪

时间:2018-09-18 10:52:58

标签: c regex gcc scanf stdio

我是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 :(得分:1)

我可以看到您的格式存在一些问题:

  • "%[^:]%d"-第一部分将读取,直到碰到冒号为止,但不会读取冒号本身,这意味着以下整数将无法正确读取,而字符串的其余部分将被读取解析不正确(如果有的话)。您需要"%[^:]:%d"

  • "%s.%s"表示字符串"test.txt"%s格式读取以分隔的字符串,这意味着第一个"%s"会将整个"test.txt"读入fileName。如果要拆分名称和后缀,则需要将%[格式用作int "%[^.].%s"

并且如注释中所述,您需要将指针传递到cmdChar