我的目标是返回与我在stdin中编写的文本相同的文本。 编译以下代码的结果:
#include <stdio.h>
char chain[990];
int znaki()
{
scanf("%s", chain);
int i=0;
do{
putchar(chain[i]);
i++;
}
while(chain[i]!=10);
return 0;
}
int main(int argc, char **argv)
{
znaki();
return 0;
}
我明白了:
MyOwnText
MyOwnText
和
许多
行
的 一些 随机文本就像cat / dev / random in linux
第一行是我的输入。 为什么呢?
答案 0 :(得分:1)
do {
putchar(chain[i]);
i++;
} while(chain[i]!=10);
此代码从链(以及更远)打印字符,直到找到包含代码10的字符。由于缓冲区未初始化,因此会从其他程序中填充一些随机数据。你看到了那些数据。 也许你想写一些像
这样的东西do {
putchar(chain[i]);
i++;
} while(i != 10);
将从数组中打印前10个字符。
顺便说一下,代码似乎容易受到缓冲区溢出的影响。
答案 1 :(得分:0)
我很明显为什么你写的输入被打印出来了。
答案 2 :(得分:0)
chain[]
不的值为10。
chain
填充了非空格字符 - 这是"%s"
指示scanf()
执行的操作:扫描并保存非空格char
。 10
通常是'\n'
,是一个空格。
char chain[990];
scanf("%s", chain);
...
while(chain[i]!=10);
而是使用fgets()
来阅读行。
int znaki(void) {
char chain[990];
while (fgets(chain, sizeof chain, stdin) != NULL) {
int i=0;
while (chain[i] != '\n' && chain[i] != '\0') {
putchar(chain[i]);
i++;
}
return 0;
}