C缓冲区溢出防止

时间:2014-03-03 04:04:45

标签: c

我是编程新手,特别是C编程人员。我正在努力学习C但我真的很擅长。因此,我希望在所有大师的建议和指导下,我都能掌握它。

我有以下代码(但它面临缓冲区溢出问题):

char buffer[1024];
int i=0;
char ch;

while((ch=getchar())!='\n'
{
 If (ch==-1) break;
Buffer[i++] = ch;
}

为了阻止缓冲区溢出,我可以执行以下操作吗?

const int BUFFSIZE=1024;
char ch;
int i=0;
while((ch=getchar())!=BUFFSIZE
{
 If (ch==-1) break;
 BUFFSIZE[i++] = ch;
}

提前谢谢!

1 个答案:

答案 0 :(得分:2)

首先,您的代码甚至无法编译。它是if,而不是If。您的变量为buffer,而非Buffer。您不能将整数(BUFFSIZE)用作数组...

接下来,不,那是错的。您正在根据缓冲区大小测试输入字符,这没有任何意义。这是您在C:

中读取字符串并防止缓冲区溢出的方法
char buffer[1024];
fgets(buffer, sizeof buffer, stdin);

如果你想逐个字符地阅读,好的,但是你需要为i < BUFFSIZE - 1添加一个检查,你还需要null来终止你的字符串(这就是为什么你有- 1的原因。检查)假设您想将其用作字符串。

const int BUFFSIZE = 1024;
/* initialize each element to 0 to ensure that the result is null terminated */
char buffer[BUFFSIZE] = {0};
int ch;
int i = 0;

while((ch=getchar()) != '\n' && i < BUFFSIZE - 1)
{
   if (ch == EOF) break;
   buffer[i++] = ch;
}
相关问题