我正在尝试使用scanf读取C ++中的字符串。我试过了
char cmd[40];
scanf("%s", cmd);
string str(cmd);
但这会给我一个我想要的字符串以及一些非感觉字符。
答案 0 :(得分:6)
scanf
说明符的 %s
将在输入字符串之后存储一个空终止符,以阻止垃圾字符进入字符串...除非您的代码具有未定义的行为。
您的问题可能是输入溢出缓冲区,导致未定义的行为;在没有适当缓冲区大小%s
的情况下使用scanf
说明符时,可能会在缓冲区的边界外写入。那时你无法保证程序的行为方式。
永远不要使用%s
scanf
而不提供缓冲区大小:
char cmd[40];
scanf("%39s", cmd);
string str(cmd);