代码块,在控制台中粘贴文本将其关闭

codeblocks, pasting a text in the cosole closes it

我正在做一项作业,要求我将给定的文本复制粘贴到控制台中,该文本由多行组成,每行都有我需要分析的数据。无论如何,问题是当我 select 文本并将其粘贴到控制台时,控制台 closes.The 问题仅在我尝试粘贴多于 1 行时出现。经过一些测试,我尝试粘贴的任何文本都超过了。
我在 C 中工作,我试图将它存储到一个字符串中:

int main()
{   
  char text[1000];
  gets(text);
  printf("%s",text);

  return 0;
}

例如,如果我尝试粘贴:

8C TS KC 9H 4S 7D 2S 5D 3S AC

正常工作
但如果我尝试粘贴:

8C TS KC 9H 4S 7D 2S 5D 3S AC

5C AD 5D AC 9C 7C 5H 8D TD KS

它会关闭 console.I 我很好奇为什么会这样。

首先:不要使用gets,这个函数不安全,因为它不 防止缓冲区溢出。如果您输入超过 999 个字符,您将获得 缓冲区溢出。请改用 fgets

你所描述的是关于你的终端的东西,而不是 C 语言。您使用的是哪个终端?

取决于 select 编辑了多少文本(例如,您 select 不止一行), 如果您粘贴,也会复制一个新行 ('\n') 在您的终端上,粘贴的新行就好像您按下了 ENTER 键一样, 输入该行 (gets() returns),printf 在终端上打印该行,然后程序结束。 根据您打开终端的方式,终端也可能会立即关闭 程序关闭后。

这与 C 无关,而是与您如何使用终端有关。


编辑

我从标题中看到您正在使用 Codeblock IDE,对吗?如果 您单击 运行,然后将打开一个控制台并执行您的程序。 大多数时候,标准设置是控制台立即关闭 程序结束后。我不知道你是否可以在 代码块配置(类似于 "don't close terminal on exit")。如果 你不能改变这个配置,你可以这样结束你的程序,所以 该终端不会立即关闭:

#include <stdio.h>
int main(void)
{
    // your progam here

    printf("Press ENTER to end");
    getchar();
    return 0;
}

我个人不喜欢这样,控制台上的程序不应该那样做 (除非出于某种原因有必要)。更好的做法是 you 打开终端,转到编译程序的目录并执行 它自己。因此,当程序结束时,终端保持活动状态。

如前所述,请勿使用 gets,因为它无法防止缓冲区溢出攻击。

您的终端关闭,因为您的程序等待用户发送新行,一旦发送,gets 将新行之前的字符读入您的 text 数组,printf 打印该数组并且您的程序完成并关闭控制台(如果控制台是由程序打开的,而不是由您或其他程序打开的)。

如果您想输入多行并对给定的输入执行任务,只需使用循环即可。这是一个简单的例子:

#include <stdio.h>

int main(int argc, char** argv) {
   char text[100];

   printf("Write something:\n");
   do {
       fgets(text, 100,stdin);
       /* do something with input */
       printf("%s", text);
      } while(text[0] != '!'); 
       /* this will run until user writes an exclamation mark in the 
       beginning of the text */

  return 0;
}