在C语言中使用无符号长整型到字符指针

时间:2012-02-21 03:36:27

标签: c pointers

我有遗留代码,其中包含以下代码逻辑:

unsigned long long address; /* Its content = Some Address, not a normal value */

strcmp (address, (const char*)some_char_buffer);

这会发出gcc警告。

有人可以建议某种方法将变量'address'强制转换为char指针,以便正确解码并且gcc不会发出警告吗?

3 个答案:

答案 0 :(得分:2)

假设address的内容实际上只是一个指针:您可以这么做:

strcmp ((char*)address, (const char*)some_char_buffer);

但如果是这种情况,那么将地址更改为char*无处不在更好:

char* address; 

根据您的代码库可能会有更大的变化。你知道为什么它首先是unsigned long long而不是指针吗?


或者,如果您希望将address内容的字节视为字符串 :(而不是address可能指向的内容),请执行此操作:

strcmp ((char*)&address, (const char*)some_char_buffer); // note the &

请注意,在这种情况下,您需要将long中的最后一个字节设为'\0'。如果这是你想要做的,我建议使用strncmp()限制长长的大小:

strncmp((char*)&address, (const char*)some_char_buffer, 
        sizeof(unsigned long long));

答案 1 :(得分:2)

您的代码应该使用uintptr_t address。 (我认为标准不保证unsigned long long有足够的位来保存指针,即使它在实践中经常发生。)

uintptr_t address = ...;
strcmp((const char *)address, some_char_buffer);

或者,如果你能忍受丑陋,

unsigned long long address = ...;
strcmp((const char *)(uintptr_t)address, some_char_buffer);

答案 2 :(得分:-2)

试试这个:

strcmp((char*)&address, (const char*)some_char_buffer);