相关疑难解决方法(0)

从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万
查看次数

sscanf被认为是安全的吗?

我对那些sscanf糟糕的建议有着模糊的回忆.我知道如果我使用字段宽度说明符,它不会溢出缓冲区,所以我的记忆只是在玩弄技巧吗?

c security scanf buffer-overflow

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

如何在sscanf中传递可变长度宽度说明符?

sscanf(input_str, "%5s", buf); //reads at max 5 characters from input_str to buf
Run Code Online (Sandbox Code Playgroud)

但我需要使用%MACRO_SIZE而不是%5s

一个简单的解决方案是为它创建一个格式字符串

char fmt_str[100] = "";    
snprintf(fmt_str, 100, "%%%ds", MACRO_SIZE);
sscanf(input_str, fmt_str, buf);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现同样的目标?

c

13
推荐指数
2
解决办法
7147
查看次数

在互联网上,我们可以在c/c ++中学习安全编程

我开始学习有关安全性和安全编程的所有知识.

我一直听说过缓冲区溢出漏洞等问题.

但我还不知道这些漏洞是如何被利用的.我们如何安全地编程以确保我们的代码是健壮的.

当我说这一切时,我感兴趣的编程语言是c和c ++.

  1. 我正在寻找免费的教程和互联网资源,我可以学习安全编程的每一个内容.

  2. 我们也欢迎平台特定提示.例如,我知道在Windows编程中我们可以使用像"memmove_s"这样的函数来获得安全代码.但Linux/Unix中的等价物是什么?或者它是一样的吗?

  3. ac/c ++程序员是否应该担心特制的格式化蜇(比如非常流行的旧PHP格式的字符串外观)?

这里有很多问题,但一般的想法是我的意思是学习安全编程.

感谢您的帮助.

c c++ security

8
推荐指数
1
解决办法
1762
查看次数

标签 统计

c ×4

security ×2

buffer-overflow ×1

c++ ×1

fgets ×1

gcc ×1

newline ×1

scanf ×1

string ×1