首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言——GCC编译器给出警告的两个有关问题

2012-02-13 
C语言——GCC编译器给出警告的两个问题!问题一程序如下:char *presu NULLif(dbdata_read-mysql_fp)presu

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是不是传入的参数。否则指针使用前没有赋值,即使用了一个没有初始化的指针,是错误的 。

热点排行