0

我有一个小问题,我似乎无法解决。假设我有一个字符串,

buffer = "1 1 X ./simple E"

我想提取 2 个整数、2 个字符和文件名,

sscanf(buffer, "%d %d %c %s %c, &a, &b, &c, d, &e);

printf("%d %d %c %s %c", a, b, c, d, e);

我并没有完全恢复我的预期。我得到“11 1 X(空)”。任何帮助表示赞赏。

4

4 回答 4

0
#include <cstdio>
#include <cstdlib>

int main() {
    char buffer[] = "1 1 X ./simple E", c, d[10], e;
    int a, b;

    //sscanf(buffer, "%d %d %c %*[./]%s %c", &a, &b, &c, d, &e); //To ignore "./"
    sscanf(buffer, "%d %d %c %s %c", &a, &b, &c, d, &e); //Don't ignore "./"
    printf("%d %d %c %s %c\n", a, b, c, d, e);
    return 0;
}

输出:

1 1 X ./simple E
于 2013-09-10T02:17:16.870 回答
0

c 和 e 可以是整数或字符。注意 d[100] 的溢出问题。

int a, b, c, e;
char d[100];
sscanf(buffer, "%d %d %c %s %c, &a, &b, &c, d, &e);

printf("%d %d %c %s %c", a, b, c, d, e);
于 2013-09-10T02:20:53.307 回答
0

您正在声明char *d,这将失败,因为它没有有效的指向位置。使用有足够空间的数组可以:

#include <stdio.h>
#include <string.h>

int main()
{
    int a, b;
    char c, e;
    char d[20];
    char buffer[] = "1 1 X ./simple E";
    sscanf(buffer, "%d %d %c %s %c", &a, &b, &c, d, &e);
    printf("%d %d %c %s %c", a, b, c, d, e);
}

输出:1 1 X ./simple E

于 2013-09-10T02:21:00.783 回答
0

sscanf 函数参数中不需要空格分隔符。

sscanf(buffer, "%d%d%c%s%c", &a, &b, &c, d, &e);

%d%c读取缓冲区时是空格分隔的,和之间不应该有空格%s,导致它吞下空间,使缓冲区没有字符和字符串之间的分隔符。

于 2013-09-10T02:21:27.830 回答