C语言_关于数组越界的问题
21视频教程网C语言编辑部3月21日整理
学生:
程序代码:
这个程序如果K出现在20个字符以后还能显示有个K在字符中,不知是编译器的问题,还是我想的不对!
C语言视频教程:
是循环终止条件有问题
当你输入超过19时st[19]就不是'\0'了
C语言视频教程:
当输入的内容越界时,越界的那一部份会污染其它变量的值,有可能是你用的p,这样p指向的值就已经不是st了,你要在scanf后面再给p赋一次值
当然如LS所说,越界后st[19]就不是'\0'了,'\0'跑到你输入的最后那一个字节的后面了
该程序有不确定的因素会导致错误。。。
C语言视频教程:
输入个数大于20的
看看输出结果
#include <stdio.h>
void main()
{
char st[20];
int i;
printf("input a string:");
scanf("%s",st);
for( i = 0; st[i] != '\0'; i++)
printf("%c ",st[i]);
}
C语言视频教程:
#include<stdio.h>
int main(void)
{
char st[20];
char *p;
int i;
int youk=0;
p = st;
scanf("%s",p);
for (i = 0; *(p+i) != '\0' ; i ++)
{
if((*(p+i)=='k') && (i<=19))
{
printf("there is a 'k' in the strint\n");
youk=1;
break;
}
}
if (!youk)
{
printf("there is no 'k' in the string\n");
}
return 0;
}
可以用指针来做,这样不容易出错。这个你看看。
C语言视频教程:
是数组越界的问题。你不能输入超过19个字符。
#include<stdio.h>
int main(void)
{
char st[20];
char *p;
int i;
i = 0;
p = st;
scanf("%19s",p); //注意这句改成 %19s ,限制只读入19字符
for (i = 0; st[i] != '\0'; i ++,p++)
{
if(*p == 'k')
{
printf("there is a 'k' in the strint\n");
break;
}
}
if (*p == '\0')
{
printf("there is no 'k' in the string\n");
}
return 0;
}
学生:
我输入了超过20个数 输出的也是一模一样的
C语言视频教程:
你这段程序后面加个printf("%s",st);
最后还是按你原样的输入 输出
数组的存放是在一片连续的存储空间
数组名 就是这个空间的入口
你输入的多少 和你的数组定义的长度没有关系
就和 int *p; char c[20];
p = c ;
这个时候 如果对p进行操作 你可以想输入几个字符 都行
p和 c的 指向是相同的 而在数组定义的时候是根据需要
而进行了长度的限定
所以 在输出的时候 你不加或限定条件不正确 它可以输出你
所输入的全部字符 前提是你的输入要大于定义的长度
而后面(没有开辟的)的空间 是不支持 r(读)操作的
所以 不能访问 内存的
学生:
谢谢
C语言视频教程编辑部
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |