gpt4 book ai didi

c - 防止缓冲区溢出

转载 作者:行者123 更新时间:2023-11-30 16:26:34 24 4
gpt4 key购买 nike

我想通过使文件名长度不超过 20 个字符来防止缓冲区溢出。我应该使用更好的功能吗?喜欢 fgets 吗?

#include <stdio.h>

int main()
{
char filename[20]; //20 character long
printf("Please enter your filename:");
scanf("%s", filename);


return 0;
}

最佳答案

scanffgets 都可以使用,但其中一个可能更适合您的应用程序。

可以使用scanf,但要检查返回值。

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int main(void) {
char filename[20];
while(scanf("%19s", filename) == 1) {
printf("filename: %s\n", filename);
}
if(errno) return perror("filename"), EXIT_FAILURE;
return EXIT_SUCCESS;
}

输出,

12345678901234567890
filename: 1234567890123456789
filename: 0

fgets 获取整行而不将其与输入匹配。

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int main(void) {
char filename[20];
while(fgets(filename, sizeof filename, stdin)) {
printf("filename: %s\n", filename);
}
if(errno) return perror("filename"), EXIT_FAILURE;
return EXIT_SUCCESS;
}

输出,

12345678901234567890
filename: 1234567890123456789
filename: 0
[\n]

通常,太长的文件名要么被截断,要么报错,这很容易通过 fgets 看到,例如 How to discard the rest of a line in C

关于c - 防止缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53017517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com