我试图从用户那里获取一些数据并将其发送到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并发送正确的字符串.
我对那些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和c ++.
我正在寻找免费的教程和互联网资源,我可以学习安全编程的每一个内容.
我们也欢迎平台特定提示.例如,我知道在Windows编程中我们可以使用像"memmove_s"这样的函数来获得安全代码.但Linux/Unix中的等价物是什么?或者它是一样的吗?
ac/c ++程序员是否应该担心特制的格式化蜇(比如非常流行的旧PHP格式的字符串外观)?
这里有很多问题,但一般的想法是我的意思是学习安全编程.
感谢您的帮助.