vc:
一.C-style 字符串 把脉vc++--p114
1.无法回避的结束符
采用字符数组表示字符串时,必须在数组的末尾不失时机的加上一个结束符‘\0’,否则无辜的程序会一直读取内存,其结果不堪设想。例:
char msg[] = {'h','e','l','l','o'};
cout << msg << endl;
结果输出:
hello 烫烫烫烫烫
由于缺少结束符,cout 操作输出了一段代码,如果在其他的场合犯上同样的错误可能会闯下更大的祸如:带来程序非法关闭。
2.不够安全,容易引起内存越界和泄漏
字符数组毕竟还是数组,可能有内存越界错误。一个字符型指针必须指向合理合法的位置,否则很危险。例:
char *msg;
strcpy(msg,"hello");//危险
要用好strcpy必须这样操作:
char msg[10];
strcpy(msg,"hello");
但如果这样用还是危险--- strcpy(msg,"hello,world");//长度超长
常见的操作是定义一个常量,如_MAX_MSG ,它的值作为数组长度。
3.不便复制与串接
字符串操作在标准c里不可直接用加减符号,在c++里有对加减的重载。
二.命名规则:
1使用合适的域操作符,一条很好的建议就是在全局标识符前面统一加上域作用符“::”,如::MessageBox(),
它就表明用的是windows API 中定义的全局函数;此外,在引用基类成员变量或是函数时,如果该标识符被重载或者覆盖,最好加上域作用符。
2.类的私有数据成员的标示符可以附以下画线前缀“_”。如:_name;这样至少让使用该类的程序员感觉的不舒服,从而提醒他不要直接使用该成员。
三.为了程序运行的效率,编译器在一定的优化设置下可能对里面的成员排放位置做了一些调整,使得整个结构体的大小为一个字长的整数倍,这就是所谓的对齐。
所以siziof()结构体的结果是根据编译器而定的,编程需谨慎。