相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

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

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

我明白了

警告:

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

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

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

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

c gets fgets buffer-overflow

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

从fgets()输入中删除尾随换行符

我试图从用户那里获取一些数据并将其发送到gcc中的另一个函数.代码是这样的.

printf("Enter your Name: ");
if (!(fgets(Name, sizeof Name, stdin) != NULL)) {
    fprintf(stderr, "Error reading Name.\n");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现它最后有一个换行符\n.所以,如果我输入John它最终发送John\n.如何删除它\n并发送正确的字符串.

c string gcc newline fgets

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

由于标准C委员会没有标准化gets()的简单替换,它应该是什么?

gets函数首先在C99中弃用,最后在C11中删除.然而,在C库中没有直接替代它.

fgets()不是替代品,因为它不会剥离最终版本'\n',这可能在文件末尾不存在.许多程序员也错了.

有一个单行代码可以删除换行符:buf[strcspn(buf, "\n")] = '\0';但它不重要,通常需要解释.它也可能效率低下.

这会适得其反.许多初学者仍然使用,gets()因为他们的老师是蹩脚的或他们的教程已经过时.

微软提出了gets_s()许多相关的函数,但它并没有默默地截断超长行,这种约束违规的行为并不简单.

BSD和GNU libc都getline在POSIX中标准化,通过realloc... 分配或重新分配缓冲区.

教初学者关于这个混乱的最佳方法是什么?

c glibc libc language-lawyer

19
推荐指数
2
解决办法
329
查看次数

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 ×5

fgets ×2

gets ×2

buffer-overflow ×1

c++ ×1

casting ×1

deprecated ×1

gcc ×1

glibc ×1

language-lawyer ×1

libc ×1

malloc ×1

newline ×1

string ×1