int ch;
while((ch = cin.get()) != EOF)
cout.put(ch); //overflow could occur here
鉴于此
unsigned char
,然后转换为int
。因此ch
将在0-255
范围内(排除EOF)。一切都很好。 put(ch)
表达式中ch
转换回char
。如果char
为signed
,那么来自ch
的{{1}}的任何值都会导致溢出吗?如果我期望在普通输入128-255
之外的某些东西,这样的代码通常是不好的做法,因为不能保证如何处理溢出?
答案 0 :(得分:1)
整数降级有规则。
当一个长整数被强制转换为short时,或者short被强制转换为char时, 保留最不重要的字节。
见:https://msdn.microsoft.com/en-us/library/0eex498h.aspx
因此ch
的最低有效字节将被保留。一切都好。
答案 1 :(得分:0)
如果要将整数转换为以空字符结尾的字符串来表示它,请使用itoa。
char * itoa ( int value, char * str, int base );
或者您可以将其转换为字符串,然后是char:
std::string tostr (int x){
std::stringstream str;
str << x;
return str.str();}
将字符串转换为char
string fname;
char *lname;
lname = new char[fname.lenght() + 1];
strcpy(f, lname.c_str());
如果您看到&#34;安全错误&#34;使用#Pragma
禁用它