如何防止扫描导致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个赞
fgets
sscanf
#define LENGTH 42#define str(x) # x#define xstr(x) str(x)/* ... */ int nc = scanf("%"xstr(LENGTH)"[^\n]%*[^\n]", array);
\n
getchar()
if (!feof(stdin)) { ...
- 3 回答
- 0 关注
- 807 浏览
添加回答
举报
0/150
提交
取消