【发布时间】:2020-11-19 13:37:51
【问题描述】:
C 中的一个新手正在尝试使用 sscanf() 从字符串中提取两个数字。这些数字应从格式为“7-12”的字符串中解析,结果应为firstNode = 7和secondNode = 12。所以我想得到数字,减号可以理解为数字分隔符。我当前的实现类似于我在this SO answer上找到的示例:
void extractEdge(char *string) {
int firstNode = 123;
int secondNode = 123;
sscanf(string, "%*[^0123456789]%u%*[^0123456789]%u", &firstNode, &secondNode);
printf("Edge parsing results: Arguments are %s, %d, %d", string, firstNode, secondNode);
}
但是如果我执行上面的代码,两个整数的初始值总是 123。请注意,string 的输出给出了正确的输入字符串,所以我认为无效字符串不可能是导致此问题的可能原因。
任何想法为什么代码不起作用?提前感谢您的帮助。
【问题讨论】:
-
%*[^0123456789]必须匹配至少一个字符。如果您的字符串以7开头,则意味着%*[]失败,并使sscanf返回。为什么不只是scanf("%d-%d"? -
行得通!没想到 posix 有时会那么容易,关于互联网上的例子。