C printf表现得很奇怪

时间:2017-03-02 18:38:40

标签: c printf

所以这就是正在发生的事情:

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.任何想法?

1 个答案:

答案 0 :(得分:1)

我们不是这里的透视者,这意味着我们无法通过心灵感应猜测你的num是如何宣布的。但有根据的猜测是%x格式与num的格式不匹配。您观察到的是格式不匹配导致的未定义行为的典型表现。

正如您在评论中所述,numunsigned long long。您无法使用unsigned long long格式打印%x%x只能与unsigned int一起使用。对于unsigned long long,您需要%llx