char str[7]="string!"这样赋值有问题,为什么不对?
答案:2 悬赏:0 手机版
解决时间 2021-01-14 06:04
- 提问者网友:嘚啵嘚啵
- 2021-01-13 18:39
char str[7]="string!"这样赋值有问题,为什么不对?
最佳答案
- 五星知识达人网友:woshuo
- 2021-01-13 20:12
char str[7]="string!" ; //定义了7个字符的空间,后面赋值是字符串共7+1个字符(string!\0),所以有越界现象出现。应该为:
char str[7+1]="string!"追问但是0-7就已经是八个了,这是我不理解的地方追答char str[7] ; 这里的7是字符个数,容量大小
数组下标从0开始,这样这个数组可访问的地址只能是str[0]到str[6]
str[7]就越界了 !追问但是我像这样输入 “string!”
#include
#include
int main()
{
char s[7];
int i=0;
scanf("%s",s);
printf("%s",s);
}
这样能输出,这样越界了吗?追答是的,越界了,只是你程序较小,运气较好,没有出现异常而已!
简单说,你向一个只能放1L水的瓶子中装 多于1L的水,就会溢出!只是程序不会表现的象水这么明显追问如果输入“string”那么这样 s[7]里面存放的是什么?追答char s[7];
scanf("%s",s); 输入string,则s中存的是string,s[0]='s' s[1]='t' s[2]='r'....s[5]='g' s[6]='\0'
没有s[7]!!
char str[7+1]="string!"追问但是0-7就已经是八个了,这是我不理解的地方追答char str[7] ; 这里的7是字符个数,容量大小
数组下标从0开始,这样这个数组可访问的地址只能是str[0]到str[6]
str[7]就越界了 !追问但是我像这样输入 “string!”
#include
#include
int main()
{
char s[7];
int i=0;
scanf("%s",s);
printf("%s",s);
}
这样能输出,这样越界了吗?追答是的,越界了,只是你程序较小,运气较好,没有出现异常而已!
简单说,你向一个只能放1L水的瓶子中装 多于1L的水,就会溢出!只是程序不会表现的象水这么明显追问如果输入“string”那么这样 s[7]里面存放的是什么?追答char s[7];
scanf("%s",s); 输入string,则s中存的是string,s[0]='s' s[1]='t' s[2]='r'....s[5]='g' s[6]='\0'
没有s[7]!!
全部回答
- 1楼网友:独行浪子会拥风
- 2021-01-13 20:27
char str[7]="string!";数组越界了。字符串系统后面默认添加‘\0’,char str[7]="string!\0"。以表示字符串结束。数组最少需要8个元素。char str[8]="string!"追问数组不是从0开始存的吗? 0-7就是八个了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯