相关疑难解决方法(0)

为什么获取功能如此危险以至于不应该使用它?

当我尝试编译使用gets()GCC函数的C代码时,

我明白了

警告:

(.text + 0x34):警告:`gets'函数很危险,不应该使用.

我记得这与堆栈保护和安全性有关,但我不确定为什么?

有人可以帮我删除这个警告并解释为什么会有这样的使用警告gets()

如果gets()是如此危险,为什么我们不能删除它?

c gets fgets buffer-overflow

210
推荐指数
9
解决办法
14万
查看次数

您是否使用TR 24731'安全'功能?

ISO C委员会(ISO/IEC JTC1/SC21/WG14)已发布TR 24731-1,正在研究TR 24731-2:

TR 24731-1:C库的扩展第一部分:边界检查接口

WG14正在研究更安全的C库函数.该TR旨在通过添加具有缓冲区长度的额外参数来修改现有程序.最新草案见N1225号文件.理由是在N1173号文件中.这将成为技术报告类型2.

TR 24731-2:C库的扩展 - 第二部分:动态分配功能

WG14正在研究更安全的C库函数.该TR面向使用动态分配而不是缓冲区长度的额外参数的新程序.最新草案见N1337号文件.这将成为技术报告类型2.

问题

  • 您是否使用支持TR24731-1功能的库或编译器?
  • 如果是这样,哪个编译器或库以及哪个平台?
  • 您是否因修复代码以使用这些功能而发现任何错误?
  • 哪些功能提供最大价值?
  • 有没有提供任何价值或负值?
  • 你打算将来使用这个图书馆吗?
  • 您是否正在跟踪TR24731-2的工作?

c security coding-style tr24731

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

C中的gets()函数

我又需要帮助!我认为使用该gets()函数非常酷,因为它就像scanf()我可以获得带有空格的输入.但我在其中一个线程(学生信息文件处理)中读到它不好用,因为根据它们,它是一个用于创建缓冲区溢出的魔鬼工具(我不明白)

如果我使用该gets()功能,我可以这样做.输入你的名字:Keanu Reeves.

如果我使用scanf(),我只能这样做.输入你的名字:Keanu

所以我听取了他们的建议并用我的gets()代码替换了fgets().问题是现在我的一些代码不工作了...有没有比其他任何功能gets()fgets()能读整条生产线和忽略空格.

c

28
推荐指数
2
解决办法
10万
查看次数

gets()不读取用户输入

我是链接列表的新手,现在我在节点数量方面遇到的问题很少.

在这里,我可以填充链表的第一个节点,但该gets()函数似乎没有暂停执行以填充下一个节点.

输出如下:

Var name : var
Do you want to continue ?y
Var name : Do you want to continue ?  // Here I cannot input second data
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

struct data
{
    char name[50];
    struct data* next;
};
struct data* head=NULL;
struct data* current=NULL;
void CreateConfig()
{
    head = malloc(sizeof(struct data));
    head->next=NULL;
    current = head;
    char ch;
    while(1)
    {
        printf("Var name : ");
        gets(current->name);    //Here is the problem,
        printf("Do you want to continue ?");
        ch=getchar();
        if(ch=='n')
        { …
Run Code Online (Sandbox Code Playgroud)

c gets

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

标签 统计

c ×4

gets ×2

buffer-overflow ×1

coding-style ×1

fgets ×1

security ×1

tr24731 ×1