相关疑难解决方法(0)

MinGW GCC:"未知的转换类型字符'h'"(snprintf)

好吧,我遇到了一个奇怪的问题,在Windows 7上使用MinGW(GCC 4.6.2)编译C文件.该文件包含以下C代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("%2hhX\n", 250);
    char c[80];
    snprintf(c, sizeof(c), "%2hhX", 250);
    printf("%s\n", c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译结果如下:

$ gcc.exe -std=c99 -pedantic -Wall test.c
test.c: In function 'main':
test.c:6:2: warning: unknown conversion type character 'h' in format [-Wformat]
test.c:6:2: warning: too many arguments for format [-Wformat-extra-args]
Run Code Online (Sandbox Code Playgroud)

现在,对我来说很奇怪的是,它抱怨snprintf第6行的电话,而不是第printf4行的电话.我错过了什么或警告是不正确的?另外,格式字符串可能有更好的等价物"%2hhX"吗?(我正在尝试将char变量打印为十六进制值.)

c printf gcc mingw

14
推荐指数
1
解决办法
5522
查看次数

Concat 4整数成一个整数

嗨,我想整合4个整数一个整数.我使用了这里找到的c​​oncatinate函数:

/sf/answers/889037341/

我的代码:

unsigned concatenate(unsigned x, unsigned y) {
    unsigned pow = 10;
    while(y >= pow)
        pow *= 10;
    return x * pow + y;        
}

void stringtoint(){
    struct router *ptr;
    ptr=start;

    while(ptr!=NULL){
        int a;
        int b;
        int c;
        int d;

        sscanf(ptr->ip, "%d.%d.%d.%d", &a, &b, &c, &d);
        int num1 = concatenate(a,b);
        int num2 = concatenate(c,d);
        int num3 = concatenate(num1,num2);
        printf("%d\n",num3);
        ptr=ptr->next;
    };

}
Run Code Online (Sandbox Code Playgroud)

问题:

我正在处理IP地址编号,例如198.32.141.140我将它们分解为4个整数并将它们连接起来形成 19832141140,但是我的连接函数正在对较大的数字进行数学运算,如198.32.141.140(变) - > -1642695340 但它连接的是小数字的IP,例如164.78.104.1变得164781041(这是正确的)

我应该怎么解决这个问题,基本上我试图让IP例如串 …

c

2
推荐指数
1
解决办法
1989
查看次数

标签 统计

c ×2

gcc ×1

mingw ×1

printf ×1