C 缓冲区溢出预防

C 缓冲区溢出预防,c,C,我是编程新手,尤其是C编程。我正在努力学习C,但我真的很不擅长。因此,我希望在所有大师的建议和指导下,我能够掌握它 我有以下代码(但它面临缓冲区溢出问题): 为了停止缓冲区溢出,我可以执行以下操作吗 const int BUFFSIZE=1024; char ch; int i=0; while((ch=getchar())!=BUFFSIZE { If (ch==-1) break; BUFFSIZE[i++] = ch; } 提前谢谢你 首先,您的代码甚至没有编译。它是if,而不是if

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

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

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

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

提前谢谢你

首先,您的代码甚至没有编译。它是
if
,而不是
if
。您的变量是
buffer
,而不是
buffer
。不能将整数(
BUFFSIZE
)用作数组

其次,不,那是错误的。您正在根据缓冲区大小测试输入字符,这毫无意义。这是在C中读取字符串和防止缓冲区溢出的方法:

char buffer[1024];
fgets(buffer, sizeof buffer, stdin);
如果要逐字符读取,可以,但需要添加对
i
的检查,并且还需要以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;
}
const int BUFFSIZE=1024;
/*将每个元素初始化为0,以确保结果以null结尾*/
字符缓冲区[BUFFSIZE]={0};
int-ch;
int i=0;
while((ch=getchar())!='\n'和&i
1。你说你想学C.2。你的题目题目是C++。3.你把问题加上了C。它是哪一个?
BUFFSIZE[i++]
?BUFFSIZE是一个常量整数。您无法重新定义其值,更不用说将其用作数组了……您拥有
const int BUFFSIZE=1024BUFFSIZE[i++]=ch那样使用它。此外,在两个版本中,在while之后的validation子句中都有一个错误-首先,它必须位于括号之间,其次,它应该类似于while(ch=getchar()&&i
)。这段代码可以编译吗?@EdHeal The OP明确提到他是编程和C的新手。与其对他无礼,认为他的问题“不明智”,不如告诉他哪里出了问题,或者建议一本书/教程。好吧,你可以用BUFFSIZE[BUFFSIZE]代替BUFFSIZE[BUFFSIZE],数组的索引是一个公共操作符。@RichardJ.RossIII:你的意思是什么?您当然不能索引到int,这是OP在其代码中的内容。如果
buffer
是一个int,那么您的示例将是相关的。建议
int ch
而不是
char ch
@chux:是的,这一点很好。甚至在将
-1
更改为
EOF
@EdS之后,我都忘了。不,你没有抓住要点。如果我有
char*a
,我可以通过执行
a[1]
1[a]
-这是有效的C代码来索引该数组。也许是古老的,但在标准中。
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;
}