使用scanf在C ++中读取字符串

时间:2014-02-17 21:18:48

标签: c++ string char scanf

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

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

但这会给我一个我想要的字符串以及一些非感觉字符。

1 个答案:

答案 0 :(得分:6)

具有scanf说明符的

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

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

永远不要使用%s scanf而不提供缓冲区大小:

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