【发布时间】:2012-04-14 04:22:19
【问题描述】:
我正在尝试在 C 中使用 sscanf 从字符串中获取一些值。但是,如果字符串的值比我想要的多,我需要它来引发错误。 IE。如果我想要一个整数,“2”应该没问题,但“2 5”应该崩溃。
现在像这样使用 sscanf 上的返回值:
if (sscanf(mystring, "%d %*s", &num) == 1)
不起作用,因为即使字符串更长,它也会返回 1。我可以这样做:
char tmpString [100];
if (sscanf(mystring, "%d %s", &num, tmpString) == 1)
效果很好,但不是特别好。还有其他方法吗?我可以使用赋值抑制,仍然得到我想要的返回值吗?
编辑 这是我使用的代码:
char c; // This is a global variable, just gets used over and over.
sscanf(mystring, "%d%c", &num, &c);
if (c == '\n') {
【问题讨论】:
-
我通常这样做:
char c; if (sscanf(mystring, "%d%c", &num, &char) == 1) -
好吧,如果你只想让它崩溃,你可以使用:
sscanf(mystring, "%d %d", &num1, &num2);(= -
谢谢贾里德。我猜与我的代码相同,但只使用一个字符更有效。效果很好。
-
在您的特定情况下,您可以使用
strtol,然后检查结束指针是否为\0。 -
关于您选择的解决方案,我会谨慎地重复使用
c,因为如果它读取一次'\n',但下一次调用无法读取任何内容,则不一定清楚它失败了,因为它的值仍然是'\n'。使用局部变量并将其初始化为 0 不会对性能产生明显影响,并且可以完全避免该问题。