C 缓冲区溢出预防
我是编程新手,尤其是C编程。我正在努力学习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
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=1024因此,不能像BUFFSIZE[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;
}