我有遗留代码,其中包含以下代码逻辑:
unsigned long long address; /* Its content = Some Address, not a normal value */
strcmp (address, (const char*)some_char_buffer);
这会发出gcc警告。
有人可以建议某种方法将变量'address'强制转换为char指针,以便正确解码并且gcc不会发出警告吗?
答案 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);