关于C\C++字符串数组 ,求教

byyyyy 2003-12-01 10:33:30
char a[5];
应该定义的下标是0-4。
而最后一个应该是a[4],
按理说此数组下标0-3可以存字符即a[0]---a[3],
而最后一个a[4]应为'\0',但今天一程序如下:
# include <stdio.h>
main()
{
char a[5]="abcde";
printf("%s\n",a);
if (a[5]=='\0')
printf("T");
else
printf("F");
return 0;
}
其结果为:
abcde
T
1.为什么不会出现数组越界的错误呢?
2.能不能总结一下字符串数组呢?
...全文
98 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
coyer 2003-12-01
  • 打赏
  • 举报
回复
a[5]="abcde";
的实际长度是6,即5个字符加一个结束符\0
加上 flyukeer的说明,我想你应该已经明白了。
afantict 2003-12-01
  • 打赏
  • 举报
回复
呵呵

不知道这样的东西该不该学习
bluebohe 2003-12-01
  • 打赏
  • 举报
回复
谁的程序这么没品?
如果是书上的程序的话找书店退书
byyyyy 2003-12-01
  • 打赏
  • 举报
回复
真的嘛?
patient 2003-12-01
  • 打赏
  • 举报
回复
没猜错的话
char b = 0x55 就是测试目的,
同理printf(" Addres of a = %04x, b = %04x\n", a, &b )就是让你看看区别何在。
实际上是编译器在段上分配数据的机制。
我对vc没有偏见,只是觉得他不适用于初学者而已。
flyukeer 2003-12-01
  • 打赏
  • 举报
回复
char a[5]="abcde";
这种定义方式,编译器会重新定义数组大小
它等同于
char a[]="abcde";
byyyyy 2003-12-01
  • 打赏
  • 举报
回复
TO:VbcNet(萝卜白菜)
你上面的程序还是调试不通。应该把a[5]改成a[6]。在就是你的程序我没有看出a[5]被变量b给覆盖了。能解释一下char b = 0x55;目的何在?printf(" Addres of a = %04x, b = %04x\n", a, &b );又是想做什么呢?
希望你别嫌我菜。呵呵
VbcNet 2003-12-01
  • 打赏
  • 举报
回复
patient(北京病人) 同学又对VC有偏见了。。呵呵
在VC下你可以试一下,这样的写法,编译根本通不过!
我把楼主的程序改了一下,就知道怎么回事了:

#include "stdio.h"
void main()
{
char b = 0x55;
char a[5] = "abcde";


printf( "%s\n", a );

if( a[5] == 0x00 )
printf( "T" );
else
printf( "F" );

printf("siezoof(a) = %d\n", sizeof(a)/sizeof(char) );
printf(" Addres of a = %04x, b = %04x\n", a, &b );
}

现在的结果是不是不一样了?呵呵,a[5]被变量b给覆盖了!!(TC3.0下通过)
beyondtkl 2003-12-01
  • 打赏
  • 举报
回复
你就是
printf(a[6])都不会出错

只不过取下面的一个字符(有可能为随机的东西)而已 但是写的时候就必须注意越界
checkyvc6 2003-12-01
  • 打赏
  • 举报
回复
呵呵,byyyyy () 学习态度不错!^_^
patient 2003-12-01
  • 打赏
  • 举报
回复
这是vc双刃剑,即强大又不安全,对基本变量类型数组就是这么处理的。如果想提高安全性就用CARRAY之流

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧