关于C语言,字符数组中越界的两个问题
来源:互联网 发布:淘宝网申请 编辑:程序博客网 时间:2024/04/20 06:40
#include<stdio.h>
#include<string.h>
void main()
{
char ch1[8];
char ch2[3] = "df";
char ch3[2][2];
int i = 0;
printf("first printf:%s", ch2); // (1)
strcpy(*(ch3+1) , ch2);
while(ch3[1][i] != '/0')
i++;
printf("%d",i); //(5)
printf("/nsecond printf:%s", *(ch3+1)); //(2);
printf("/nthird printf:%s", ch2); //(3)
strcpy(ch1, ch2);
printf("/nfourth printf:/n%s", ch1); //(4);
return;
}
只有(1)行打出了df ,(2)(3)(4)行均未打出字符,第(5)行打出数字2;
1.通过运行这个程序,发现ch2已是空字符数组;为什么ch2的字符数组内容变了?
2.ch3二维数组的第二行,经过赋予两个字符后,应该已经越界,为什么,在紧接着的ch2[2] = '/0'?
#include<stdio.h>
#include<string.h>
void main()
{
char ch1[8];
char ch2[3] = "df";
char ch3[2][2];
int i = 0;
printf("first printf:%s", ch2); // (1);
strcpy(*(ch3+0) , ch2);
while(ch3[0][i] != '/0')
i++;
printf("%d",i); // (5);
printf("/nsecond printf:%s", *(ch3+0)); // (2);
printf("/nthird printf:%s", ch2); // (3)
strcpy(ch1, ch2);
printf("/nfourth printf:%s", ch1); // (4);
return;
}
这个程序,只将ch2赋予了ch3[0]而已的改动,但得出了正确的打出结果,即(1)(2)(3)(4)都打出df,(5)打出数字2;
在调试过程中发现ch[0][2] == '/0'与ch[1][0] == '/0',推测这两个元素是否占用同样的内存?
通过调试上面这两个程序,发现在给ch2,ch3分配内存时,ch2起始地址:ox0012ff74,ch3起始地址:ox0012ff70
在第一个程序中,ch3[1]越界至ox0012ff74,给此地址,赋予'/0';而strcpy与printf函数,在拷贝与打出字符串内容时,都是以'/0'为结束,标志,这就是为什么ch2字符数组内容变为空字符串的原故.
而在第二个程序中,实际上ch3[0]也发生越界,不过是ch3中的"内部"越界,'/0'赋予到了ch3[1][0]中;
- 关于C语言,字符数组中越界的两个问题
- 关于c语言中字符数组的'\0'问题
- C语言中数组越界的例子
- 关于C语言的字符数组问题
- 关于C语言的函数调用过程和数组越界
- 关于C语言数组越界的演示程序
- 关于数组的越界问题
- C语言中不检查数组越界的应用
- C语言中数组越界导致死循环的测试
- C语言中一类特殊的数组越界!!
- C语言数组越界问题实例
- 关于Java中数组越界问题
- C语言 字符处理的两个问题
- C/C++中键盘输入数组越界问题
- C语言结构体中字符数组的问题
- 数组--C语言中关于数组的小问题
- 关于C语言中两个惊叹号(!)的问题
- 关于strcpy 和数组越界的问题
- 非常好的博客!
- [Struts2]"s:optiontransferselect" 标签BUG
- ASP.NET异常具体信息: System.IndexOutOfRangeException: 索引 0 不是为负数,就是大于行数。
- 引用不同文件夹下的Dll文件
- 里程碑作用的总结会-2010.03.(20~21)
- 关于C语言,字符数组中越界的两个问题
- E52收据图片
- 最近在弄9650,转帖9650图像保存
- DefaultView 的作用
- 40种网站设计常用技巧
- 米老师讲故事_农民收玉米
- 使用prototype扩展的JavaScript常用函数库
- 德国房价缘何十年不涨?
- Python 遍历目录并打印出子目录的大小