我有一个 C 程序,它接受一个 long long
参数。当我尝试将这么长的值转换为其二进制表示形式时,结果发现一切都是错误的。但是,如果我设置一个等于 long long
参数值的 long long
变量,那么我会得到正确的二进制表示形式。
int main(int argv, long long value)
{
long long i = value; // value = 2
long long e = 2;
printBits(sizeof(e), &e); // 0000000000000000000000000000000000000000000000000000000000000010
printBits(sizeof(i), &i); // 0000000000000000011111111111110000010000111010101110101000001000
return 0;
}
因此,正如您在上面看到的那样,通过控制台检索到的参数作为输入与应有的内容相差甚远。
printBits() 是此 solution. 的复制粘贴
有人可以澄清发生了什么吗?
最佳答案
main 的签名是
int main(int argc, char** argv)
不幸的是,C 编译器可能非常宽松,因此可能发生的情况是,指向 char*
的指针被默默地转换为 long long
,从而导致无意义的结果。
您需要实际解析参数,例如使用strtoll
。
在没有 -Wall
编译器标志的情况下使用 C 是自找麻烦。启用所有警告后,您会立即发现问题:
warning: second argument of ‘main’ should be ‘char **’ [-Wmain]
int main (int argc, long long value)
^~~~
关于C:二进制命令行参数与二进制局部变量不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240078/