如何防止扫描导致C中的缓冲区溢出?我使用以下代码:while ( scanf("%s", buf) == 1 ){防止可能的缓冲区溢出从而传递随机长度字符串的最佳方法是什么?我知道可以通过调用以下命令来限制输入字符串:while ( scanf("%20s", buf) == 1 ){但我更希望能够处理用户输入的任何内容。或者这不能安全地使用scanf,我应该使用fget?
3 回答
精慕HU
TA贡献1845条经验 获得超8个赞
snprintf()scanf()
int scanner(const char *data, char *buffer, size_t buflen){
char format[32];
if (buflen == 0)
return 0;
snprintf(format, sizeof(format), "%%%ds", (int)(buflen-1));
return sscanf(data, format, buffer);}scanf()m%s, %c, %[char *char **
char *buffer = 0;if (sscanf(data, "%ms", &buffer) == 1){
printf("String is: <<%s>>\n", buffer);
free(buffer);}sscanf()%ms
MYYA
TA贡献1868条经验 获得超4个赞
a
int main(){
char *str = NULL;
scanf ("%as", &str);
if (str) {
printf("\"%s\"\n", str);
free(str);
}
return 0;}编辑:scanf%m
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
fgetssscanf
#define LENGTH 42#define str(x) # x#define xstr(x)
str(x)/* ... */ int nc = scanf("%"xstr(LENGTH)"[^\n]%*[^\n]", array);\ngetchar()
if (!feof(stdin)) { ...- 3 回答
- 0 关注
- 962 浏览
添加回答
举报
0/150
提交
取消
