我是编程新手,特别是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;
}
提前谢谢!
答案 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;
}