在这条线上:
*decString = hexVal;
这*decString
是 a char
,因此您正在分配一个指向 a 的指针char
,因此是警告。
您不能在 C 中分配字符串;一般来说,您必须复制它们。
但是,您还需要指定要转换的值,并确保为格式化的值提供足够的空间。目前,您正在获取第一个字符decStr
并将其转换为十六进制,这作为接口有点不寻常(实际上可能是错误的)。
你通常会这样做:
void decToHex(int value, char *hexString)
{
sprintf(hexString,"%x", value);
}
注意更改的界面。这不允许函数检查它是否有足够的空间;可悲的是,将责任放在调用代码上是一个长期存在(但很麻烦)的 C 传统。更安全的方法是使用snprintf()
C99:
int decToHex(int value, char *buffer, size_t buflen)
{
return snprintf(buffer, buflen, "%x", value);
}
这告诉您字符串有多长,或者如果没有空间容纳所有数据,缓冲区应该有多长(Windows 除外,当转换的字符串太长时它返回 -1)。字符串应该以 null 结尾(注意 MSVC),并且永远不应该溢出由buffer
and指定的缓冲区buflen
。原则上,设置buffer
为 NULL 应该允许您找出需要多大的缓冲区(再次小心 MSVC)。
你通常会这样称呼它:
char buffer[20];
if (decToHex(314159265, buffer, sizeof(buffer)) >= sizeof(buffer))
...oops - conversion failed...
或者,更懒惰:
char buffer[32]; // Bigger margin for error
decToHex(314159265, buffer, sizeof(buffer));