从int到char的转换可能会改变其值

时间:2014-03-31 21:37:04

标签: c++ compilation

这在第524:35行给出了一个错误,其中显示了

strcap[i] = tolower (str [i]);

说从int转换为char可能会改变它的值,我在源代码中有一些错误,所以如果我可以修复这个,那么其他的将是一块蛋糕。有人可以用简单的语言向我解释一下吗?我对此很新......谢谢!

char *imccapitalize( const char *str )
{
   static char strcap[LGST];
   int i;

   for( i = 0; str[i] != '\0'; i++ )
   strcap[i] = tolower( str[i] );
   strcap[i] = '\0';
   strcap[0] = toupper( strcap[0] );
   return strcap;
}

3 个答案:

答案 0 :(得分:2)

许多C“字符”函数实际上将int作为字符。 (这样他们就可以返回特殊值,例如EOF,并且因为这种做法在人们注意到类型安全是一件好事之前已经陷入困境。)touppertolower是其中两个功能。 tolower的{​​{3}}是:

int tolower(int c);

因此,要摆脱这些警告,您必须对返回值进行类型转换:

strcap[i] = (char) tolower( str[i] );

答案 1 :(得分:2)

它应该是警告,而不是错误(但是大多数编译器都可以选择处理警告 作为错误,所以如果使用该选项,将产生错误。)

生成警告是因为tolower返回int,这对于C运行时库字符操作函数是常见的。将int分配给char会导致值被截断,因为在大多数计算机上char是一个字节而int是两个或更多,因此警告。

类型转换将消除警告:

strcap[i] = (char)tolower(str[i]);

答案 2 :(得分:0)

使用比字符更​​多的字节来表示整数。因此,如果您尝试将整数转换为char,则必须删除额外的字节,这可能会改变整数的值。