我一直在调试我的EAN程序超过一天,仍然找不到导致程序崩溃的错误。到目前为止,我已将其缩小为一个函数strwithstyle函数,因为当它没有被调用时程序运行正常(尽管没有添加样式字符)。但是,当被调用时,程序会在乱码中显示其输出,程序会触发断点。如果有人能告诉我为什么会发生这种情况会有很大的帮助!
void EAN::toStrWithStyle(char* str) const {
if (isRegistered()) {
if (choice == '-') {
sprintf(str, "%s-%s-%s-%s-%c", prefix, area, publisher, title, ean[strlen(ean) - 1]);
}
else if (choice == ' ') {
sprintf(str, "%s %s %s %s %c", prefix, area, publisher, title, ean[strlen(ean) - 1]);
}
else {
toStr(str);
}
}
}
这是显示功能(这样你就可以了解参数str的来源):
void EAN::display(std::ostream& os) const {
char* strmem = nullptr;
if (isRegistered()) {
strmem = new char[strlen(ean) + 5];
toStrWithStyle(strmem);
}
else {
strmem = new char[strlen(ean) + 1];
toStr(strmem);
}
os << right << setw(17) << strmem;
delete [] strmem;
strmem = nullptr;
}