sscanf与冒号分隔符

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

我是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。有人能指出我做错了什么。谢谢!

c regex gcc scanf stdio
1个回答
1
投票

我可以看到你的格式有几个问题:

  • "%[^:]%d" - 第一部分将读取直到它到达冒号,但​​它不会读取冒号本身,这意味着将无法正确读取以下整数,并且将错误地解析其余字符串(如果有的话)。你需要"%[^:]:%d"
  • "%s.%s"为字符串"test.txt"%s格式读取空格分隔的字符串,这意味着第一个"%s"将整个"test.txt"读入fileName。如果要拆分为名称和后缀,则需要将%[格式用作int "%[^.].%s"

并且如评论中所述,您需要将指针传递给cmdChar

© www.soinside.com 2019 - 2024. All rights reserved.