c - 为什么这段代码会给我运行时错误?C
问题描述
我不明白为什么它总是给出运行时错误:/那里有什么问题?我该如何解决这个问题?这是我的代码:
#include <stdio.h>
int main()
{
int i=0, ch;
char word[100];
for(;(ch = getc(stdin)) != EOF;)
{
do{
word[i] = ch;
if(ch == 32) word[i] = '\0';
i++;
} while(ch != 32);
}
printf("%s", word);
return 0;
}
解决方案
do{
word[i] = ch;
if(ch == 32) word[i] = '\0';
i++;
} while(ch != 32);
您在第一次按键时溢出了缓冲区。除了这段损坏的代码之外,这应该指出没有范围检查的固定大小缓冲区的更广泛问题。
推荐阅读
- java - 有没有更干净的方法来写这个?
- php - 如何检查字符串中是否只有制表符(\ t char)
- date - 使用 Dask map_partitions 将日期和时间从两列转换为单个日期时间列
- ios - 删除数据后应用程序大小不断增加
- r - 在 R、data.frame() 或 write.csv2() 函数中,更改编码
- couchdb - rdbms 表到 couchdb 数据库表
- python - For 循环 - 在列表中创建最多三个项目的列表
- c - 谁能解释为什么我们需要 if (prime[2]!=1) 将值分配给数组,而数组的所有值最初都设置为零?
- python - 美汤IMDB
- c++ - begin() 在 C++17 中是 constexpr 而在 C++14 中是 cbegin() 吗?