gpt4 book ai didi

c++ - 扫描 char[] 和 int 时 sscanf 出错

转载 作者:行者123 更新时间:2023-11-30 00:44:48 25 4
gpt4 key购买 nike

我有一个示例程序:

#include <iostream>
using namespace std;

int main() {
// your code goes here
string line;
cin >> line;
char s1[12];
char s2[12];
int a1 ,a2;
sscanf((char*)line.c_str(), "%s %s %d %d", s1 ,s2 , &a1 , &a2);
cout << s1 << endl;
cout << s2 << endl;
cout << a1 << endl;
cout << a2 << endl;
return 0;
}

命令行输入:
Hello World 23 456

程序的输出没有按预期出现:

输出:
你好
����"+
-74572855
11042

谁能告诉我问题出在哪里?

最佳答案

这是因为:

cin >> line;

阅读单个单词,而不是句子!

将其更改为:

getline(cin, line);

一切都会好起来的!


注意:正如其他答案指出的那样,使用字符串解析方法时应该更加小心

  • 在使用解析值之前,始终检查字符串解析方法(在本例中为 sscanf)的返回值。在这种情况下,您会注意到返回值为 1,并且只设置了第一个字符串。
  • 始终通过使用 %<length>s 显式指定允许的字符串的最大长度来防止内存损坏,在这种情况下,%11ss1s2长度为 12 个字符,sscanf附加一个空终止符。

关于c++ - 扫描 char[] 和 int 时 sscanf 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46788366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com