使用sprintf为char *分配底片

时间:2017-02-27 13:55:20

标签: c printf signed

我的计划中有一行代码如下:sprintf (line, "%s [%lu..%lu]", pp->help, min, max);其中min, max;unsigned longlinechar[SOME_SIZE]。在调用sprintf之前,我调用了一个可以为min分配否定的函数,而min得到的值-5转换为4294967291,因为它是无符号的。

所以我尝试做类似的事情:

if((long)min < 0) // works fine because 4294967291 has the binary of 0x1...
    sprintf (line, "%s [%d..%d]", pp->help, (long)min, max);

但这不起作用。 if是真的,但是当我打印行时,我仍然得到正数(即4294967291),我该如何解决这个问题?

注意:我不确定在执行结束时如何实现打印,但现在sprintf本身无法正常工作,因为它添加了未签名而不是签名。

这是我的代码的简化:

unsigned long min = foo() /* in this case -5 */, max = goo() /* in this case 5*/;
char line[100];

if((long)min < 0){
    sprintf (line, "%s [%d..%d]", pp->help, (long)min, max);
}// when it prints I get [4294967291..5] instead of [-5..5]
else{
    sprintf (line, "%s [%lu..%lu]", pp->help, min, max);
}

编辑:我试图在我的gcc上获得类似的结果,但失败了。但我看到一些非常奇怪的东西可以解释这个。声明line时,它是char[],但当调试器到达sprintf时,line被标识为unsigned char ......但遗憾的是我可以' t在这里发布代码。

0 个答案:

没有答案