Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sprintf为char*分配负片_C_Printf_Signed - Fatal编程技术网

使用sprintf为char*分配负片

使用sprintf为char*分配负片,c,printf,signed,C,Printf,Signed,我的程序中有一行代码如下:sprintf(行,“%s[%lu..%lu]”,pp->help,min,max)其中最小值,最大值是无符号长的和行是字符[某些大小]。在调用sprintf之前,我调用一个函数,该函数可以为min分配负数,min得到-5的值,该值转换为4294967291,因为它是无符号的 所以我试着做一些类似的事情: if((long)min < 0) // works fine because 4294967291 has the binary of 0x1...

我的程序中有一行代码如下:
sprintf(行,“%s[%lu..%lu]”,pp->help,min,max)其中<代码>最小值,最大值
无符号长的
字符[某些大小]
。在调用
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);

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

请编辑您的问题,并告诉我们您希望得到什么值的输出。1)您使用
无符号长字符
的任何原因,尽管您显然想要
有符号长字符
?2) 提供一个。3) 听起来像是XY问题(请参见1)4)无符号到有符号的转换是由实现定义的。您的实现指定了哪些行为?无法复制,请单击此处->对我有效。请准确编辑您得到的内容(不是“不起作用”)和您期望的内容(具体值),因为这可以提供错误的线索。例如,根据编译器/平台的不同,您可能需要签名输出的
%ld
。查看为
max打印的内容(以及应该打印的内容)可能有助于确定''%1'是有符号长字符串的正确格式字符串,而不是''%d'。也许这就是问题的原因
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);
}