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

0 c++ string scanf char

我试图使用scanf读取C++中的字符串.我试过了

char cmd[40];
scanf("%s", cmd);
string str(cmd);
Run Code Online (Sandbox Code Playgroud)

但是这给了我一个我想要的字符串以及一些非感觉字符.

bam*_*s53 6

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

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

切勿使用%sscanfwihtout提供一个缓冲区大小:

char cmd[40];
scanf("%39s", cmd);
string str(cmd);
Run Code Online (Sandbox Code Playgroud)

  • @ user2062607:然后创建缓冲区41 (2认同)