标签: gets

如果有人抱怨gets(),为什么不对scanf("%s",...)做同样的事情?

来自man gets:

永远不要使用gets().因为在不事先知道数据的情况下无法判断get()将读取多少个字符,并且因为gets()将继续存储超出缓冲区末尾的字符,所以使用它是非常危险的.它已被用来打破计算机安全.请改用fgets().

几乎无处不在我看到scanf的应该有同样的问题(一个方式使用缓冲区溢出/缓冲区溢出)scanf("%s",string).这种情况存在这个问题吗?为什么scanf手册页中没有关于它的引用?为什么gcc在编译时不会发出警告-Wall

ps:我知道有一种方法可以在格式字符串中指定字符串的最大长度scanf:

char str[10];
scanf("%9s",str);
Run Code Online (Sandbox Code Playgroud)

编辑:我不是要求确定前面的代码是否正确.我的问题是:如果scanf("%s",string)总是错的,为什么没有警告,手册页中没有任何关于它的内容?

c gets scanf buffer-overflow buffer-overrun

5
推荐指数
1
解决办法
847
查看次数

关于红宝石"得到"的问题

我想知道为什么当我试图获得不同的输入时它忽略了我的第二个输入.

#!/usr/bin/env ruby
#-----Class Definitions----

class Animal
  attr_accessor :type, :weight
end

class Dog < Animal
  attr_accessor :name
  def speak
    puts "Woof!"
  end
end

#-------------------------------

puts
puts "Hello World!"
puts

new_dog = Dog.new

print "What is the dog's new name? "
name = gets
puts

print "Would you like #{name} to speak? (y or n) "
speak_or_no = gets

while speak_or_no == 'y'
  puts
  puts new_dog.speak
  puts
  puts "Would you like #{name} to speak again? (y or n) "
  speak_or_no = …
Run Code Online (Sandbox Code Playgroud)

ruby gets input

5
推荐指数
1
解决办法
1万
查看次数

在Ruby中,如何将sleep与gets结合起来?我想等待用户响应1分钟,否则继续

我正在运行一个循环,我在其中使用"gets.chomp"命令等待用户响应.如何将其与睡眠/计时器命令结合使用?

例如.我希望它等待1分钟让用户输入一个单词,否则它将继续返回循环.

ruby sleep gets timer

5
推荐指数
2
解决办法
1039
查看次数

gets()是否正式弃用?

基于最新的C++ 11 草案,C++引用了ISO/IEC 9899:1999/Cor.3:2007(E)中C库函数的定义(根据§1.2[intro.refs]/1) .

根据最新的C99 TC3 草案,The gets function is obsolescent, and is deprecated.(根据§7.26.9/ 2)

我可以肯定地说gets()在C和C++中都弃用了吗?

c c++ gets deprecated

5
推荐指数
1
解决办法
5250
查看次数

为什么首先获得C标准的一部分?

每个C程序员都知道gets除非标准输入连接到可信源,否则无法安全使用.但是为什么C的开发人员在成为C标准的正式部分之前没有注意到这样一个明显的错误?为什么要在C11中将其从标准中删除并用一个执行边界检查的函数替换它?我知道fgets它通常用于它的位置,但这有一个令人讨厌的习惯,就是保持\n最后的状态.

c standards gets deprecated c11

5
推荐指数
1
解决办法
202
查看次数

Ruby:带有默认值的gets.chomp

是否有一些简单的方法如何在提供默认值的同时在 Ruby 中请求用户输入?

考虑 bash 中的这段代码:

function ask_q {
    local PROMPT="$1"
    local DEF_V="$2"
    read -e -p "$PROMPT" -i "$DEF_V" REPLY
    echo $REPLY
}

TEST=$(ask_q "Are you hungry?" "Yes")
echo "Answer was \"$TEST\"."
Run Code Online (Sandbox Code Playgroud)

你能用 Ruby 实现类似的行为gets.chomp吗?

function ask_q(prompt, default="")
    puts prompt
    reply = gets.chomp() # ???
    return reply
def

reply = ask_q("Are you hungry?", "Yes")
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过这种方式对 Ruby 中的功能进行排序复制......

def ask_q(prompt, default="")
    default_msg = (default.to_s.empty?) ? "" : "[default: \"#{default}\"]"
    puts "${prompt} ${default}"
    reply = gets.chomp()
    reply = (default.to_s.empty?) ? …
Run Code Online (Sandbox Code Playgroud)

ruby bash gets default-value

5
推荐指数
1
解决办法
1894
查看次数

如何超时gets.chomp

我正在尝试编写一个程序,要求用户gets.chomp在三秒钟内回答问题,否则答案将自动返回false.

我想出除了超时部分以外的一切,我想知道是否有人可以请求帮助.

ruby gets

5
推荐指数
1
解决办法
1008
查看次数

在控制台中使用JavaScript输入用户输入

我需要.js在带有spidermonkey的控制台中运行一个用户输入,如下所示:

$ js myprogram.js

什么是相当于Ruby的JavaScript gets

javascript console gets spidermonkey

4
推荐指数
1
解决办法
3万
查看次数

变量周围的堆栈已损坏

我遇到了问题gets.

目的是从用户那里获得输入,直到他点击'Enter'.

这是代码:

struct LinkedListNode* executeSection2()
{
    char inputArr [3] = {'\0'};
    struct LinkedListNode* newNode;
    struct  LinkedListNode* head = NULL;

    gets (inputArr);

    while (inputArr[0] != 0) // The user didn't press "Enter"
    {
        newNode=newLinkedListNode();
        newNode->tree=newHuffmanNode(inputArr[0],atoi(inputArr+2));

        head = addNode(&head, newNode);

        gets (inputArr);
    }

    head = buildHuffmanTree(&head);
    return head;
}
Run Code Online (Sandbox Code Playgroud)

似乎没问题,用户点击'Enter',代码从while出来,但在返回后,我收到错误信息:

变量'inputArr'周围的堆栈已损坏

我想我没有正确读取键盘输入.我会为一些指导感到高兴.

谢谢.

c gets

4
推荐指数
1
解决办法
136
查看次数

如何在终端中捕获 Ruby 输入提示的一些特殊按键(并让其他人正常通过)

我的 Ruby 脚本类似于:

something = gets      # or STDIN.gets
puts something

def arrow_pressed
    puts "arrow totally pressed"
end
Run Code Online (Sandbox Code Playgroud)

一旦用户提示存在,我希望箭头键之外的所有键盘输入正常发生。如果按下这些按钮,我不希望终端中出现任何内容(例如^[[A)。我只想执行我的arrow_pressed方法。我想执行它而不需要用户点击Return

我已经尝试过这个要点- 效果很好,只是即使在更改它以正常地通过大多数击键之后,我仍然无法Backspace(或其他特殊功能)工作。

我很高兴使用gets(图书馆或其他什么)以外的东西。任何帮助,将不胜感激!

ruby terminal stdin gets

4
推荐指数
1
解决办法
1782
查看次数