随机文本作为输出

时间:2014-11-25 22:52:10

标签: c codelite

我的目标是返回与我在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

第一行是我的输入。 为什么呢?

3 个答案:

答案 0 :(得分:1)

do {
    putchar(chain[i]);
    i++;
} while(chain[i]!=10);

此代码从链(以及更远)打印字符,直到找到包含代码10的字符。由于缓冲区未初始化,因此会从其他程序中填充一些随机数据。你看到了那些数据。 也许你想写一些像

这样的东西
do {
    putchar(chain[i]);
    i++;
} while(i != 10);

将从数组中打印前10个字符。

顺便说一下,代码似乎容易受到缓冲区溢出的影响。

答案 1 :(得分:0)

  1. 你有一个阵列。
  2. 您向用户询问了一个单词,并将其存储在该数组的开头。
  3. 然后你打印了数组。
  4. 我很明显为什么你写的输入被打印出来了。

答案 2 :(得分:0)

chain[] 的值为10。

chain填充了非空格字符 - 这是"%s"指示scanf()执行的操作:扫描并保存非空格char10通常是'\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;
 }