Sscanf和Sprintf可以将字符串转换为十进制数?

3
我需要解决以下练习题:
编写一个程序,获取字符串的前几个字符和一个八进制整数,并将其写入另一个之前为空的字符串中,然后使用函数sscanf和sprintf将第二个字符串的内容以十进制形式显示出来。
例如,如果用户输入12(八进制),则系统必须显示10(十进制)。
在我的scanf之后,数组seconda是“12325”。
问题是我不知道如何让程序理解这个字符串是一个八进制数,并且如何使用sprintf将其转换为十进制。
以下是我的当前代码:
#include <stdio.h>

int main(void) {
    char prima[] = "12325dsdfa";
    char secodna[500];

    sscanf_s(prima, "%[0123456789]o", secodna, 500);
}

从字符串转换为整数,再从整数转换为字符串... - Roddy
4
无符号八进制值;使用 sscanf_s 函数将字符串 prima 转换为八进制数并存储在变量 oct_value 中,使用 sprintf 函数将 oct_value 转换为字符串并存储在变量 secodna 中。 - BLUEPIXY
如果你想使用sprintf_s,@BLUEPIXY就是它的实际用法了吗? - Amarildo
2个回答

4
你误用了 %o,将其与字符集格式 %[] 混合使用,并且传递了太多参数。

你应该只使用 %o,它将尽可能多地转换无符号整数的八进制。

然后使用 sprintf()%u 将其转换回十进制字符串。

像这样:

#include <stdio.h>

int main(void) {
    unsigned int x;
    if(sscanf("12foo", "%o", &x) == 1)
        printf("%u\n", x);
    return 0;
}

请注意,上述代码将十进制字符串输出到标准输出而不是保留它(即使用printf()而不是sprintf()),但这很容易更改。它会输出 "10"。

使用 sscanf_s(prima, "%hho", secodna, 500); 时,我遇到了这个错误:'sscanf_s' : too many arguments passed for format stringplaceholders and their parameters expect 1 variadic arguments, but 2 were provided - Amarildo

1
一旦将其转换为二进制整数变量(使用sscanf()),请使用%u格式的sprintf()将其输出到适当的字符串中。确保首先定义了适当的缓冲区。 sscanf参考文献 sprintf参考文献
unsigned int intbuf;
char myinput[80];
char myoutput[80];

strcpy(myinput, "12345");
sscanf(myinput, "%o", &intbuf);
sprintf(myoutput, "%u", intbuf);

@chux 谢谢,这就是我早上打字太快的结果。我会修复它。 - sabbahillel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接