- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是这门语言的初学者,遇到过这个问题。在网上搜索后,它似乎与内存分配、指针等有关。我不太明白……在这里,我试图通过类将数据添加到二进制文件中……所以想请教一下是什么问题-->
void addques()
{
question abc;
ofstream fout;
fout.open("question.txt",ios::app|ios::binary);
cout<<"Enter Question!\n";
gets(abc.ques);
cout<<"Enter Options!\n";
gets(abc.option1);gets(abc.option2);gets(abc.option3);gets(abc.option4);
cout<<"Enter correct option number\n";
cin>>abc.k;
cout<<"Enter question nummber"; cin>>abc.quesno;
fout.write((char*)&abc,sizeof(abc));
fout.close();
cout<<"File closed";
}
似乎所有具有 ifstream/ofstream 类对象的函数都显示此错误。最后一行“文件关闭”也正在执行,之后出现错误。难道是这一行-- fout.write((char*)&abc,sizeof(abc))
; ???请帮忙
这是相关的类-->
class question
{ public:
char ques[80];
char option1[50], option2[50], option3[50], option4[50];
char k;
char quesno;
};
对于整个程序,我在这里粘贴了我的代码 http://pastebin.com/S7KNby0E请看到它...因为我无法在这里这样做
最佳答案
您输入的问题或答案是否对您的缓冲区之一来说太长了?我敢打赌你是,它超出了类的范围并破坏了堆栈。另外,混合使用 cin 和 cout 以及像 gets 这样的 C 风格 IO 函数是自找麻烦,所以不要这样做。
由于您使用的是 C++,因此不必像字符数组那样进行字符串操作。有一个 STL 类可以为您处理所有内存垃圾。我将按以下方式重写您的类(class):
class Question
{ public:
string ques;
string option1, option2, option3, option4;
char k;
char quesno;
void write(fstream& f)
{
f << ques.length() << " " << ques << endl
<< option1.length() << " " << option1 << endl
<< option2.length() << " " << option2 << endl
<< option3.length() << " " << option3 << endl
<< option4.length() << " " << option4 << endl
<< k << " " << quesno << endl;
}
};
和你的功能如下:
void addques()
{
Question abc;
ofstream fout;
fout.open("question.txt", ios::app);
cout << "Enter Question!" << endl;
getline (cin, abc.ques);
cout << "Enter Options!\n";
getline(cin, abc.option1);
getline(cin, abc.option2);
getline(cin, abc.option3);
getline(cin, abc.option4);
cout << "Enter correct option number: ";
cin >> abc.k;
cout << "Enter question number: ";
cin >> abc.quesno;
// you will have to change your writing method a bit because you can't just write the string object straight to disk like you were before
abc.write(fout);
fout.close();
}
然后您应该能够使用提取运算符以与写入工作大致相同的方式将一个读入流中。
由于必须使用二进制,因此可以通过以下方式将整数值存储为二进制值:
int i = ques.length();
fout.write((const char *) &i, sizeof(i));
这会将 32 位整数值直接写入流,而无需先将其转换为字符串。您的字符串将采用以下格式:
+ 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
0x0 [0x00 0x00 0x00 0xC0 ][H E L L
0x8 O <space> W O R L D <null> ]
长度是前 4 个字节,此处显示为 0x0000000C(整数值 12)。字符串紧随其后,其值为“HELLO WORLD\0”。\0 是空终止符。在我的示例中,此长度包括空终止符。
Sizeof 是一个运算符,它在编译器可以确定的范围内生成指定类型的内存大小。对于整数类型,如 int、short、char 等,它将返回该类型使用的字节数。对于数组,您可能会遇到令人困惑的行为。如果在静态声明为固定大小的数组上调用,sizeof 将返回数组的长度 * 一个元素的大小。
int derp[1000];
sizeof(derp); // sizeof(int) * 1000
如果编译器不知道数组有多大,您将得到的是指向第一个元素的指针的大小。所以要小心。您不能对指针使用 sizeof 来确定数组大小。
int derp2[];
sizeof(derp2); // sizeof(int *), probably 4 or 8
int * derp3 = derp;
sizeof(derp3); // sizeof(int *), probably 4 or 8
要获取 std::string(STL 字符串类)的长度,请使用长度成员:
string hurr = "hello world";
hurr.length(); // does NOT include the null terminator
// length of string AND terminator is hurr.length() + 1
关于c++ - 错误 0xC0000005 : Access Violation when returning from a function C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11801321/
我无法弄清楚为什么会这样。 $ cat | g++ -xc - #include int main(int argc, char* argv[]) { return 0; } :1: fatal
我试图断言标签(动态填充)的值包含一个子字符串作为 UITest 结果的一部分。 我的问题是 XCTAssert 似乎不允许子字符串或近似匹配(从我能找到的内容来看)。有没有人对我如何编写以下内容以找
有谁知道如何处理 tvOS 上的 UI XCTest 的滑动手势?我的页面顶部有一个隐藏的导航栏,在 Remote 上向下滑动时会出现该导航栏。我似乎无法在 UI 测试中使用 XCUIRemote.s
从 Xcode10 开始,我们可以在多个模拟器上并行运行 UI 测试。但是,我找不到在多个设备上运行的方法。这不可能吗? 谢谢,R 最佳答案 这是可能的,但只能通过命令行。替代方法 - 设置机器人(X
我在应用商店提交应用时选择了 xc adhoc * 分发配置文件。我想我应该选择特定于应用程序的分发配置文件。 但现在处于等待审核状态。我的问题是苹果是否批准了它? 或者我需要在 iTunes 上重新
如果用户需要在登录后重新验证,我会运行一段代码。在 UI 测试期间,有时会显示此弹出窗口,因此我会检查它是否存在 if (XCUIApplication().staticText["authLabel
我正在尝试同时使用 XCUI 和 XC 测试。我找到了这个 twitter post说这是可能的。但是,我应该在build设置的哪个部分放置这些新属性? 我问是因为我尝试了该方法并将这些设置放在项目目
所以,让我先解释一下我的问题。 我不想中继我的网络服务器数据,我想为我的 XCUITests stub 数据。因此,我将确保它在 100% 的时间内返回正确的数据,有时我需要测试一些特定的(例如错误或
我正在尝试从 TextView 中删除以前的值,但由于光标始终位于 TextView 的开头,所以我无法删除。我正在使用 extension XCUIElement { /** Re
我已经在 Ubuntu 上安装、配置了我的 Postgres XC 1.0.2。我能够毫无困难地设置 GTM、协调器、节点 1 和 2。但是当尝试在两个节点之间分发数据时,我收到了以下实际上相互矛盾的
我被要求重构包含片段的查询: SELECT @xi:=@xi+1 AS xc FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3) xc1,
我试图求解一个线性系统 Xc=y那是方形的。我知道解决这个问题的方法是: 使用逆向 c= 使用高斯消元法 使用伪逆 据我所知,这些似乎与我认为的基本事实不符。 首先通过将 30 次多项式拟合到频率为
我从 Apple 开发者网站中删除了所有应用 ID 和配置文件。然后我创建了一个新的 Xcode 7.3.1 项目,并单击“未找到匹配的配置文件”消息旁边的“修复问题”。 它创建的应用ID称为“XC
我的 Xcode 突然生成了它自己的 Ad Hoc 配置文件。我的临时配置文件都很好,但是当我现在创建存档时,xcode 只生成它自己的配置文件。我不知道是什么导致了这个问题。 这是问题的截图。 当我
我尝试在 Glassfish 应用程序服务器(版本 4.1.1)上使用 JAX-RS 资源,但收到 java.lang.NoClassDefFoundError: org/codehaus/jacks
根据SourceForge Postgres-XC 的页面,在 Postgres-XC 中创建分布式表时,它可以使用属性 DISTRIBUTE BY : DISTRIBUTE BY REPLICATI
尝试在使用 SDWebImage 设置的 CocoaPods 上运行 XCTest,但我只能看到如下错误。有什么建议吗? :0: error: module name "" is not a vali
昨天我下载了Xcode 6,现在我遇到了一个我无法解决的问题。在我的成员(member)中心,我有有效的证书和临时供应(分发)。直到昨天,在 Xcode 5 中,如果我想将我的 .ipa 添加到 Te
我正在使用 Parse.com 将客户端推送通知从一台 iDevice 发送到另一台 iDevice。 它适用于“开发”设置,即- 在“开发”上设置的 appID 的推送通知设置 - 开发 SSL 证
我正在使用 Xcode 5。我有一个 OS X Framework/iOS 静态库项目,其中包含混合的 ObjC/C++ 代码和语言方言设置为 C11/C++11。 我添加了一个使用 XCTest 的
我是一名优秀的程序员,十分优秀!