御笔剑客 发表于 2022-8-22 09:41:41

关于gets和gets_s的使用问题

如果我用C11标准,使用gets_s,编译器会提示C99不支持gets_s,但我cmake文件中明明设置的是C11标准。
如果我直接使用gets,可以编译通过,但是运行的时候会提示错误,然后结束程序,应该怎么解决呢?

临时号 发表于 2022-8-22 10:33:56

本帖最后由 临时号 于 2022-8-22 11:50 编辑

目前GCC中还没有完全实现此标准, 因此 gets_s() 函数尚未包含在目前的GNU 工具链中。Clang里也暂时没有增加对 gets_s 的支持。
你可以自行实现gets_s函数
#include <stdio.h>
#include <string.h>
char *gets_s(char *str, int num)
{
    if (fgets(str,num, stdin) != 0)
    {
      size_t len = strlen(str);

      if (len > 0 && str == 'n')

            str = ' ';
      return str;
    }
    return 0;
}

御笔剑客 发表于 2022-8-22 12:04:34

临时号 发表于 2022-8-22 10:33
目前GCC中还没有完全实现此标准, 因此 gets_s() 函数尚未包含在目前的GNU 工具链中。Clang里也暂时没有增 ...

{:10_285:}那这不是死循环了吗,get不让用,gets_s不支持{:10_266:},除了自己手动实现或者fget替代还有其他解决方案吗

临时号 发表于 2022-8-22 12:06:57

御笔剑客 发表于 2022-8-22 12:04
那这不是死循环了吗,get不让用,gets_s不支持,除了自己手动实现或者fget替代还有 ...

要不你改回c99

临时号 发表于 2022-8-22 12:08:03

御笔剑客 发表于 2022-8-22 12:04
那这不是死循环了吗,get不让用,gets_s不支持,除了自己手动实现或者fget替代还有 ...

或者用Visual Studio,我看了一下,Visual Studio支持gets_s

御笔剑客 发表于 2022-8-22 12:33:07

临时号 发表于 2022-8-22 12:06
要不你改回c99

好吧{:10_266:}
页: [1]
查看完整版本: 关于gets和gets_s的使用问题