【问题标题】:String input in C: How the char *s; s = malloc(...) works? [closed]C中的字符串输入:char *s; s = malloc(...) 有效吗? [关闭]
【发布时间】:2021-09-26 13:56:54
【问题描述】:

当我在 Hackerrank 中练习字符串时,他们向我展示了一种在 C 中获取字符串输入的新方法,这是我以前从未见过的。 这是代码:

char *s;
s = malloc(1024 * sizeof(char));
scanf("%[^\n]", s);
s = realloc(s, strlen(s) + 1); 

你能解释一下这些东西是如何工作的吗?在很多程序中,我总是通过这种方式输入字符串:

char *s[MAX_LEN];
fflush(stdin);
gets(s);

谢谢!

【问题讨论】:

  • 完整解释here
  • 您的编译器是否对您使用第二个代码发出警告?如果没有,请调高警告级别。
  • here
  • 除了内存处理的东西,你不应该使用gets。它是不安全的,几十年前就被标准淘汰了。
  • 请将您的问题集中在您想要解释的显示代码的哪个细节上。这样做,例如通过尽可能多地解释自己,以便答案可以填补空白。有关您要解释的功能,请参阅文档。

标签: c string malloc


【解决方案1】:

scanf("%[^\n]", s);gets() 更差读取一个

它没有提供导致缓冲区溢出的宽度限制,当输入为"\n" 时无法设置s,并且不消耗尾随的"\n"


使用fgets() 将用户输入的 读入字符串

要删除潜在的尾随'\n',请参阅here

fgets(buf, n, stdin) 中最多可读取n-1 个字符。需要额外的代码来消耗多余的输入。

【讨论】:

  • 最后一段是什么意思?
  • @RobertHarvey 好点。扩展答案。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2013-09-08
  • 2012-04-26
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多