使用 scanf 读取C++字符串

Reading a string in C++ using scanf

本文关键字:字符串 C++ 读取 scanf 使用      更新时间:2023-10-16

我正在尝试使用 scanf 读取C++中的字符串。我试过了

char cmd[40];
scanf("%s", cmd);
string str(cmd);

但这给了我一个我想要的字符串加上一些无意义的字符。

带有

%s说明符的scanf将在输入字符串之后存储一个空终止符,以防止垃圾字符进入字符串...除非代码具有未定义的行为。

您的问题可能是输入溢出缓冲区,导致未定义的行为;在没有适当缓冲区大小的情况下使用%s说明符时,scanf可能会写入缓冲区边界之外。此时,您无法保证程序的行为方式。

切勿将%s与提供缓冲区大小的scanf一起使用:

char cmd[40];
scanf("%39s", cmd);
string str(cmd);