阅读量:0
在 Linux 系统中,gets()
函数已经被认为是不安全的,因为它可能导致缓冲区溢出
- 使用
fgets()
函数替代gets()
函数。fgets()
函数允许你指定要读取的最大字符数,从而避免了缓冲区溢出的风险。
#include<stdio.h> int main() { char buffer[256]; printf("Enter a string: "); fgets(buffer, sizeof(buffer), stdin); printf("You entered: %s", buffer); return 0; }
- 使用
getline()
函数。getline()
函数会自动分配足够的内存来存储输入的字符串,但请注意,你需要在使用完之后释放这块内存。
#include<stdio.h> #include <stdlib.h> int main() { char *buffer = NULL; size_t len = 0; ssize_t read; printf("Enter a string: "); read = getline(&buffer, &len, stdin); if (read != -1) { printf("You entered: %s", buffer); } free(buffer); return 0; }
- 使用
scanf()
函数时,确保使用%s
格式说明符并指定最大字符数。
#include<stdio.h> int main() { char buffer[256]; printf("Enter a string: "); scanf("%255s", buffer); // 注意:这里使用了255而不是256,因为C字符串需要一个额外的字符来存储空字符'\0' printf("You entered: %s", buffer); return 0; }
总之,避免使用 gets()
函数,转而使用更安全的替代方法,以防止缓冲区溢出和其他安全问题。