处理C语言数组溢出问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 07:13:51
现在我要输入一个字符串,但是字符串应该怎样输入才能保证不会发生溢出现象呢? 这个字符串的长度是不确定的,所以应该怎么处理才行?
随便怎么输入,只要能保证不会溢出就行了
例如
char a[100]
scanf("%s",a); 或 getchar(); 或gets(); 我只是要处理溢出问题,就是保证随便输入多少个字符,都不会溢出。 或者输入的字符超过,定义的字符数组时报错,并终止输入。

#include <stdio.h>
void main()
{
int fun(char *p);
char *p,a[100];
int n;
scanf("%s",a);
p=a;
n=fun(p);
printf("%d\n",n);
}

int fun(char *p)
{
char a[100];
char *m;
int i=0,j,n,f;
m=p;
if(m==NULL)
{
f=-1;
goto end;
}
for(;(*m)!='\0';m++)
{
a[i++]=*m;
n=i;
}
for(i=0,j=n-1;j>=0;j--,i++)
{
if(a[i]==a[j])
f=1;
else if(a[i]!=a[j])
{
f=0;
break;
}
}
end:;
return (f);
}

这是我写的,现在要保证输入的字符不过溢出,或就算溢出也能照常运行。

//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

char *getstr(void) /*读取一个不定长度的字符串,如果成功则返回字符串首地址,否则返回NULL*/
{
char c,*str=NULL;
int n=0;
while (1)
{
c=getchar();
str=str?realloc(str,sizeof(char)*++n):malloc(sizeof(char)*++n);
if (c=='\n'||c==EOF) {
str[n-1]=0;
break;
}
str[n-1]=c;

}
return str;
}
int main(void)
{
char *str=getstr();
if (str) { /*测试,如果str非空,则说明读取成功,输出读取的字符串并释放空间*/
puts(str);
free(str);
}

return 0;
}
//---------------------------------------------------------------------------

#include<stdio.h>

int main()
{
char a[100] = {0};
int i, b;

for(i=0; i<100; i++)
{
if((b = getchar()) != '\n