#define和typedef的用法与区别
#define MAX 100 //#define在预编译时进行简单替换,不做正确性检查
typedef string STRING; //typedef在编译时处理
%m.nf和%m.nd
对于小数%m.nd的意思,m表示输出项占的位数,n表示精度(即小数点后保留几位)。如用%4.1f格式输出1.1234,结果为“ 1.1”。
对于整数%m.nd的意思,m表示输出项占的位数,如果输出位数小于n,则前面补0直到n位数据,如果大于n则左补空格。例如用%4.2格式输出1,结果为“ 01”。
basic_string&replace( size_type index, size_type num, const char *str );
C++手册中描述为“用str中的num个字符(从index开始)替换 本字符串中的字符 ”是错误的,正确的应该为“ 用str中的字符替换本字符串中的(从index开始)num个字符 ”。数据类型自动转换导致死循环
int f(int index, DATATYPE data[])
{
int total = 0;
for (unsigned i = 0; i < index; i++)
total += data[i].val;
return total
}
这里的index可通过界面配置,若配置了-1,i < index,做比较运算时会将int转换成unsigned,-1的编码是FFFFFF(补码表示),转化为无符号的值是unsigned的最大值,这个循环会一直运行,直到访问到非法的内存。在if、for、while的判断条件中,不要使用符号不一致的比较,否则很容易因自动类型转换导致不可预期的结果。