所以这就是正在发生的事情:
ClientSocket.Socket.SendText('MyText');
数字15的输出:
int onesCount = ones(num);
printf("Number 0x%x has %d ones.\n", num, onesCount);
但如果我将printf更改为:
Number 0xa has 0 ones.
输出数字15:
int onesCount = ones(num);
printf("Number 0x%x has", num);
printf(" %d ones.\n", onesCount);
通常,如果我只打印Number 0xa has 4 ones.
,它会输出正确的值。如果我用其他变量printf它,它打印0.任何想法?
答案 0 :(得分:1)
我们不是这里的透视者,这意味着我们无法通过心灵感应猜测你的num
是如何宣布的。但有根据的猜测是%x
格式与num
的格式不匹配。您观察到的是格式不匹配导致的未定义行为的典型表现。
正如您在评论中所述,num
为unsigned long long
。您无法使用unsigned long long
格式打印%x
。 %x
只能与unsigned int
一起使用。对于unsigned long long
,您需要%llx
。