问题描述
大家好......这是一个很棒的论坛,
在我的一篇帖子中,有人告诉我使用输入功能更安全
with''A字段宽度说明符''...
所以我的问题,我应该使用哪个函数?。
" scanf("%s",start-> acNome);"
Hi all...this is a great forum,
In one of my posts, someone tell me that is more secure use input function
with ''A field-width specifier''...
So my question, which function i should use ?.
"scanf("%s",start->acNome);"
的病毒来保护您的mashine
种。不要使用scanf或缓冲区溢出>>废弃你的mashine。
最好的问候..所有...并且度过愉快的一天(学术短语:-)))。 ...
kind. Don''t use scanf or buffer overflow >>ruins your mashine.
Best regards..all..and have a nice day(scholastic phrase :-)))....
推荐答案
的任何类型的病毒来保护您的mashine。不要使用scanf或缓冲区溢出>>废弃你的mashine。
最好的问候..所有...并且度过愉快的一天(学术短语: - )))....
any kind. Don''t use scanf or buffer overflow >>ruins your mashine.
Best regards..all..and have a nice day(scholastic phrase :-)))....
一般惯例是使用fgets而不是scanf来输入
字符串。
-
ISA
The general convention is to use fgets rather than scanf to enter
strings.
--
ISA
scanf适用于字符串输入,简单,
一旦你看到它是如何完成的。
在new.c中,输入字符超过LENGTH,将被丢弃。 />
rc可以赋值为EOF或0或1.
如果rc等于1,那么你在''array''中有一个字符串。
如果r c等于0,然后是读取的行,
只有一个换行符,
并且不能保证在''array''中有一个字符串。
如果rc等于EOF,那么在任何转换之前你输入的失败是
,
并且不能保证是' 'array''。
/ * BEGIN new.c * /
#include< stdio.h>
#define LENGTH 100
#define str(x)#x
#define xstr(x)str(x)
int main(无效)
{
int rc;
char数组[LENGTH + 1];
fputs("输入任何字符串:",stdout);
fflush(stdout);
rc = scanf(" ;%" xstr(LENGTH)" [^ \ n]%* [^ \ n]",array);
if(!feof(stdin)){
getchar();
}
while(rc == 1){
printf(" your string is%s \ n" ;,数组);
fputs("输入任何要继续的字符串,
或只需按Enter键结束程序:",
stdout);
fflush(stdout);
rc = scanf("%" xstr(LENGTH)" [^ \ n]%* [^ \ n]",array);
if(!feof(stdin)){
getchar();
}
}
返回0;
}
/ * END new。 c * /
-
pete
scanf is fine for string input, and easy,
once you''ve seen how it''s done.
In new.c, input characters beyond LENGTH, will be discarded.
rc can be assigned a value of EOF or 0 or 1.
If rc equals 1, then you have a string in ''array''.
If rc equals 0, then the line which was read,
only had a newline character,
and there is not guaranteed to be a string in ''array''.
If rc equals EOF, then you have an input failure occuring
before any conversion,
and there is not guaranteed to be a string in ''array''.
/* BEGIN new.c */
#include <stdio.h>
#define LENGTH 100
#define str(x) # x
#define xstr(x) str(x)
int main(void)
{
int rc;
char array[LENGTH + 1];
fputs("Enter any string: ", stdout);
fflush(stdout);
rc = scanf("%" xstr(LENGTH) "[^\n]%*[^\n]", array);
if (!feof(stdin)) {
getchar();
}
while (rc == 1) {
printf("Your string was %s\n", array);
fputs("Enter any string to continue, "
"or just hit the Enter key to end the program: ",
stdout);
fflush(stdout);
rc = scanf("%" xstr(LENGTH) "[^\n]%*[^\n]", array);
if (!feof(stdin)) {
getchar();
}
}
return 0;
}
/* END new.c */
--
pete
类型的>>病毒来保护您的mashine。不要使用scanf或缓冲区溢出>>破坏你的mashine。
kind. Don''t use scanf or buffer overflow >>ruins your mashine.
那太强了。上面使用的scanf()_as保证在一个快乐的日子里给你一个
的缓冲区溢出问题。当正确使用
时,scanf()没有问题,即_with_字段说明符。例如,如果start-> acNome
是20个字符长,则scanf("%19s",start-> acNome);是安全的。
我会建议不要使用scanf(),但这只是因为使用
正确使用除可预测宽度数据之外的任何内容都很棘手,并且%s没有做大多数新手认为它做的事情。 fgets()更容易使用,并且具有
的优势,它_requires_,而不仅仅是允许,你指定一个
最大输入宽度。
Richard
That''s too strong. scanf() _as used above_ is guarantee to get you a
buffer overflow problem one happy day. scanf() is no problem when used
correctly, i.e., _with_ a field specifier. For example, if start->acNome
is 20 chars long, scanf("%19s", start->acNome); is safe.
I''d advise against scanf(), but only because it is tricky to use
correctly with any except predictable-width data, and %s does not do
what most newbies think it does. fgets() is much easier to use, and has
the advantage that it _requires_, not just allows, you to specify a
maximum input width.
Richard
这篇关于使用scanf来防止缓冲区溢出...的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!