- 论坛徽章:
- 0
|
buf[strlen(buf)-1]='\0';//trim newline
这句是有问题的,如果buf[0]==0,就会变成buf[-1]='\0',存在内存的非法写操作的问题的。
可以试运行这个程序就知道了,怎么越界操作的
main()
{
char buf1[4];
char buf2[4];
char buf3[4];
buf1[0]=0;
printf("buf1_add=%X,buf2_add=%X,buf3_add=%X\n",buf1,buf2,buf3);
printf("buf2-1=%X\n",buf2-1);
memset(buf1,'1',4);
//memset(buf2,'3',4);
memset(buf3,'3',4);
printf("buf1[0]=%02X\n",buf1[0]);
printf("buf1[1]=%02X\n",buf1[1]);
printf("buf1[2]=%02X\n",buf1[2]);
printf("buf1[3]=%02X\n",buf1[3]);
printf("\n");
printf("buf3[0]=%02X\n",buf3[0]);
printf("buf3[1]=%02X\n",buf3[1]);
printf("buf3[2]=%02X\n",buf3[2]);
printf("buf3[3]=%02X\n",buf3[3]);
//printf("len=%d",strlen(buf)-1);
buf2[0]=0;
buf2[strlen(buf2)-1]='\0';//造成内存越界的地方,是一个重大的bug
printf("\n");
printf("buf1[0]=%02X\n",buf1[0]);
printf("buf1[1]=%02X\n",buf1[1]);
printf("buf1[2]=%02X\n",buf1[2]);
printf("buf1[3]=%02X\n",buf1[3]);
printf("\n");
printf("buf3[0]=%02X\n",buf3[0]);
printf("buf3[1]=%02X\n",buf3[1]);
printf("buf3[2]=%02X\n",buf3[2]);
printf("buf3[3]=%02X\n",buf3[3]);//此处的值从0x33被非法改了成0x00了
}
[ 本帖最后由 ccjjhua 于 2006-6-14 11:45 编辑 ] |
|