I have question about output in console
string str;
scanf("%s", str);
printf("%s", str);
Why do I get strange symbols, which have trouble with encoding?
I have question about output in console
string str;
scanf("%s", str);
printf("%s", str);
Why do I get strange symbols, which have trouble with encoding?
std::string
is a class (user-defined type). On the other hand, the conversion specifier s
is designed to input or output character arrays. So the code snippet has undefined behavior.
Instead you could use operators >> and << overloaded for the class std::string
to input or output data from/to streams like
std::string str;
std::cin >> str;
std::cout << str << '\n';
If you want to use the functions scanf and printf then use character arrays as for example
char str[100];
scanf( "%99s", str );
printf( "%s\n", str );
If as you wrote in a comment
I have a task, out string with help printf.
then in this case you should check whether string
is indeed the standard C++ type or an alias for the type char *
introduced like for example
typedef char *string;
or like
using string = char *;
printf
and scanf
expect variables of type [const] char *
with an "%s" format specifier.
In general, the other answer to use std::cin
/ std::cout
instead is preferrable.
If you absolutely must use printf
to output a std::string
, use the c_str()
method to get access to a const char *
representing the same string as in the std::string
; example:
string str;
std::cin >> str;
printf("%s", str.c_str());
Note the const
in const char* c_str()
- meaning you are not allowed to change the returned string. So, it cannot be used for scanf
. There, you'd have to stick to a char *
...