gpt4 book ai didi

c++ - 从 scanf 读取 C 样式字符串时出现段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:43 26 4
gpt4 key购买 nike

我有以下简单的代码:

#include <cstdio>
#include <queue>
#include <iostream>

struct Pacient {
int ill_state;
int ev_num;
bool operator==(const Pacient& other) const {
return ill_state == other.ill_state && ev_num == other.ev_num;
}
bool operator<(const Pacient& other) const {
return (ill_state < other.ill_state) || (ill_state == other.ill_state && ev_num > other.ev_num); // má menšiu prioritu, ak čaká kratšie (vyššie číslo na kartičke pri vstupe do ambulancie
}
bool operator>(const Pacient& other) const {
return (ill_state > other.ill_state) || (ill_state == other.ill_state && ev_num < other.ev_num);
}
};

int main() {
char* ccmd;
std::priority_queue<Pacient> ps;
int ev_num, ill_state;
while (std::scanf("%s", ccmd)) {
std::string cmd(ccmd);
if (cmd == "dalsi") {
if (ps.empty()) {
std::printf("-1\n");
} else {
std::printf("%d\n", ps.top().ev_num);
ps.pop();
}
} else if (cmd == "pacient") {
std::scanf("%d%d\n", &ev_num, &ill_state);
Pacient new_ps;
new_ps.ev_num = ev_num;
new_ps.ill_state = ill_state;
ps.push(new_ps);
} else if (cmd == "koniec") {
break;
}
}
return 0;
}

编译并向标准输入输入内容后,出现以下段错误:

       Program received signal SIGSEGV, Segmentation fault.
__strlen_sse2_pminub () at ../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S:38
38 ../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S: No such file or directory.

我使用的是 Ubuntu 13.10 64 位。有人可以解释一下,是什么导致了这个问题吗?

注意:我使用的是 scanf 而不是 cin,因为我有(来自学校的)特定说明使用 scanf、printf 而不是 cin、cout。否则我不会使用它。

最佳答案

scanf 声明一些存储以写入:

char ccmd[1000];

否则,*ccmd 是一个随机指针,(可能)没有足够的存储空间来写入字符。请注意,scanf 不会对该空间进行间接访问。

此外,ccmd 已经是一个指针,因此不需要额外的&(地址):

 std::scanf("%s", ccmd)

关于c++ - 从 scanf 读取 C 样式字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077979/

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