C 中常见的编程错误
来源:互联网 发布:软件测试行业方向 编辑:程序博客网 时间:2024/04/25 13:08
1、尝试修改字符串常量
char *p = "i'm hungry!";
p[0]= 's';
答案与分析:
上面的代码能成功通过编译,但会产生运行时的错误即造成内存的非法写操作。 "i'm hungry"实质上是字符串常量,而常量往往被编译器放在只读的内存区,不可写。p初始指向这个只读的内存区,而p[0] = 'I'则企图去写这个地方,编译器当然不会答应。
2、没有结束标志‘\0‘的假字符串
char a[3] = "abc";合法吗?使用它有什么隐患?
printf("%s",a);
结果:输出abc后面跟着一堆乱码。将数组a的长度改为大于3就可以。也不要显示的添加字符串结束标志,以为在初始化字符串或使用scanf函数初始化时系统会自动在字符串结尾添加结束标志。
答案与分析:
在标准C中这是合法的,但是它的生存环境非常狭小;它定义一个大小为3的数组,初始化为"abc",注意,它没有通常的字符串终止符'\0',因此这个数组只是看起来像C语言中的字符串,实质上却不是,因此所有对字符串进行处理的函数,比如strcpy、printf等,都不能够被使用在这个假字符串上。
3、将数组名作为左值
char a[3],b="China";
a=b;
printf("%s",a);
编译时提示出错:
因为数组名表示数组首元素的地址,其值不能改变所以数组名不能作为左值。
4、两个指针可以相减,但是相加没有意义
int a[10],*p1,*p2;p1=a;p2=&a[5];printf("十六进制地址形式:&p1=%0x,&p2=%0x\n",p1,p2);printf("十进制地址形式:&p1=%d,&p2=%d,p2-p1=%d\n",p1,p2,p2-p1);
结果:
分析:(1245008-1244988)/4=20/4=5; 除以4因为sizeof(int)=4; p2-p1 即其所指字符的间距。
若p1+p2;则会在编译时出现以下错误:
- C语言编程中常见的错误
- C 中常见的编程错误
- c编程常见错误
- C中常见的编程
- c语言编程的常见错误
- C语言 函数编程的常见错误
- 编程中常见的错误处理方式
- Socket编程中常见的错误
- VS2013 OpenGL 编程中常见的错误
- java编程中常见的拼写错误
- c/c++中常见的错误
- C语言中常见的内存错误
- 【读书笔记】C程序中常见的内存操作有关的典型编程错误
- 原创:常见C编程错误
- c/c++常见编程错误
- 编程中常见错误原因
- C语言中常见错误
- c中常见错误(转)
- hdoj2112
- 春季养生之道
- 图形学中矩阵作用
- JAVA字符串补零
- 将图片保存在iPhone的相册中
- C 中常见的编程错误
- Web页面的聚合技术
- LDD3源码分析之与硬件通信&中断处理
- 只有华强北才能拯救诺基亚?
- CKFinder2.1破解的方法(删除This is the demo version of CKFinder)
- Oracle to_char to_date to_num函数
- nfs:server is not responding,still trying 原因与解决方案
- debian下使用dpkg来安装/卸载deb包
- 实体数据模型EDM的作用