Is it safe to use getchar() and putchar()
I've been told that I should use fgets and sscanf instead of scanf and I'm just wondering if there are any problems associated with getchar() and putchar() that are similar to the problems with scanf.
c
add a comment |Â
I've been told that I should use fgets and sscanf instead of scanf and I'm just wondering if there are any problems associated with getchar() and putchar() that are similar to the problems with scanf.
c
add a comment |Â
I've been told that I should use fgets and sscanf instead of scanf and I'm just wondering if there are any problems associated with getchar() and putchar() that are similar to the problems with scanf.
c
I've been told that I should use fgets and sscanf instead of scanf and I'm just wondering if there are any problems associated with getchar() and putchar() that are similar to the problems with scanf.
c
c
asked Nov 10 at 22:52
HoneyBunchers
133
133
add a comment |Â
add a comment |Â
2 Answers
2
active
oldest
votes
no since getchar
and putchar
(unlike gets
, scanf
, fgets
) use char
types, not char *
, so there's no risk of buffer overflow since there's no buffer (there is a buffer since I/O is buffered, but you don't control its size and it's properly managed by the C library)
Be careful when using them in a loop not to recreate security issues in your own code, the ones that you wanted to avoid.
If your goal is to read a string using getchar
, you'll have to create a loop to store characters. If you aren't careful, you could end up with the same kind of buffer overflow issues. The problem has just moved somewhere else in your code.
add a comment |Â
The main problem with scanf
is that it's pattern language doesn't always allow enough control, particularly if you want to restrict input to a line-oriented format. A secondary problem, which can be overcome by specifying size limits, is that by default string fields are of unlimited size and can therefore overflow their destination buffers.
getchar
does not suffer from either of those issues,, for reasons which I hope are obvious.
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
no since getchar
and putchar
(unlike gets
, scanf
, fgets
) use char
types, not char *
, so there's no risk of buffer overflow since there's no buffer (there is a buffer since I/O is buffered, but you don't control its size and it's properly managed by the C library)
Be careful when using them in a loop not to recreate security issues in your own code, the ones that you wanted to avoid.
If your goal is to read a string using getchar
, you'll have to create a loop to store characters. If you aren't careful, you could end up with the same kind of buffer overflow issues. The problem has just moved somewhere else in your code.
add a comment |Â
no since getchar
and putchar
(unlike gets
, scanf
, fgets
) use char
types, not char *
, so there's no risk of buffer overflow since there's no buffer (there is a buffer since I/O is buffered, but you don't control its size and it's properly managed by the C library)
Be careful when using them in a loop not to recreate security issues in your own code, the ones that you wanted to avoid.
If your goal is to read a string using getchar
, you'll have to create a loop to store characters. If you aren't careful, you could end up with the same kind of buffer overflow issues. The problem has just moved somewhere else in your code.
add a comment |Â
no since getchar
and putchar
(unlike gets
, scanf
, fgets
) use char
types, not char *
, so there's no risk of buffer overflow since there's no buffer (there is a buffer since I/O is buffered, but you don't control its size and it's properly managed by the C library)
Be careful when using them in a loop not to recreate security issues in your own code, the ones that you wanted to avoid.
If your goal is to read a string using getchar
, you'll have to create a loop to store characters. If you aren't careful, you could end up with the same kind of buffer overflow issues. The problem has just moved somewhere else in your code.
no since getchar
and putchar
(unlike gets
, scanf
, fgets
) use char
types, not char *
, so there's no risk of buffer overflow since there's no buffer (there is a buffer since I/O is buffered, but you don't control its size and it's properly managed by the C library)
Be careful when using them in a loop not to recreate security issues in your own code, the ones that you wanted to avoid.
If your goal is to read a string using getchar
, you'll have to create a loop to store characters. If you aren't careful, you could end up with the same kind of buffer overflow issues. The problem has just moved somewhere else in your code.
answered Nov 10 at 22:58
Jean-François Fabre
100k954109
100k954109
add a comment |Â
add a comment |Â
The main problem with scanf
is that it's pattern language doesn't always allow enough control, particularly if you want to restrict input to a line-oriented format. A secondary problem, which can be overcome by specifying size limits, is that by default string fields are of unlimited size and can therefore overflow their destination buffers.
getchar
does not suffer from either of those issues,, for reasons which I hope are obvious.
add a comment |Â
The main problem with scanf
is that it's pattern language doesn't always allow enough control, particularly if you want to restrict input to a line-oriented format. A secondary problem, which can be overcome by specifying size limits, is that by default string fields are of unlimited size and can therefore overflow their destination buffers.
getchar
does not suffer from either of those issues,, for reasons which I hope are obvious.
add a comment |Â
The main problem with scanf
is that it's pattern language doesn't always allow enough control, particularly if you want to restrict input to a line-oriented format. A secondary problem, which can be overcome by specifying size limits, is that by default string fields are of unlimited size and can therefore overflow their destination buffers.
getchar
does not suffer from either of those issues,, for reasons which I hope are obvious.
The main problem with scanf
is that it's pattern language doesn't always allow enough control, particularly if you want to restrict input to a line-oriented format. A secondary problem, which can be overcome by specifying size limits, is that by default string fields are of unlimited size and can therefore overflow their destination buffers.
getchar
does not suffer from either of those issues,, for reasons which I hope are obvious.
answered Nov 10 at 23:01
rici
151k19131196
151k19131196
add a comment |Â
add a comment |Â
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid â¦
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid â¦
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244213%2fis-it-safe-to-use-getchar-and-putchar%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown