C语言——GCC编译器给出警告的两个问题!
问题一
程序如下:
char *presu = NULL;
if(dbdata_read->mysql_fp)
presu = (char *)mysql_stat(dbdata_read->mysql_fp);
该段程序中,mysql_stat()这个函数的返回值为char*字符串指针类型,在"presu = (char *)mysql_stat(dbdata_read->mysql_fp)"。这句程序当中,如果不加类型转换(char *),程序编译时会给出警告:“warning: assignment discards qualifiers from pointer target type”。请问问什么会有警告?
问题二
程序如下:
int Decode(const char* psrc, unsigned char* pdst, int srclen)
{
int dstLen=0;
int i=0;
while (i < srclen){
if (strncmp(psrc, "=\r\n", 3) == 0){
psrc += 3;
i += 3;
}else{
if (*psrc == '='){
sscanf(psrc, "=%02X", pdst);
pdst++;
psrc += 3;
i += 3;
}else{
*pdst++ = (unsigned char)*psrc++;
i++;
}
dstLen++;
}
}
*pdst = '\0';
return dstLen;
}
其中“sscanf(psrc, "=%02X", pdst);”该句程序会给出警告:“warning: unsigned int format, different type arg (arg 3)”,请问为什么?
[解决办法]
1
mysql_stat函数的返回值是什么样子的?如果不是char* 就得需要强制转换.
[解决办法]
一问:如果一个函数要求返回的类型与实际返回不同当然会有警告
二问:sscanf(psrc, "=%02X", pdst); 我的知识有限,还没学到%x所以不能回答你
[解决办法]
1.函数返回值不是 char*,所以有警告,需要强制转换。
2.pdst是unsigned char的指针,而赋予%x类型数据,同理需要强制转换。
第二个还有一个问题,不知unsigned char* pdst是不是传入的参数。否则指针使用前没有赋值,即使用了一个没有初始化的指针,是错误的 。