在whileLTestStr.exe中0x008F1D0D处抛出异常:0xC0000005:访问冲突写入位置0x00770000。
在尝试将一个字符从一个数组放入另一个数组时,运行时会出现此错误。
输入字符串后立即发生错误,它不会关闭程序,只是“暂停”它。
#include "stdafx.h"
#include <iostream>
#include <cstring>
int main()
{
using namespace std;
char test[20];
char result[20];
int i = 0;
cout << "Enter a string without symbolic characters: ";
cin.get(test, 20);
for (i; (test[i] != '?' || test[i] != '\0'); i++)
{
result[i] = test[i]; //Exception gets thrown here
}
if (strcmp(result, test) != 0)
{
cout << "Fail.";
}
else
{
cout << result << endl;
cout << "Success.";
}
return 0;
}
我已经用注释标出了抛出异常的位置。
此程序仅用于限制用户可以输入的内容,仅用于测试。但我不明白为什么这不起作用。
可能有一些功能可以帮我这么做,但是我还在学习这门语言,我只是想尝试和测试我可以用循环等做什么。
修改
在建议之后我更改了AND运算符的OR运算符,我不再收到错误。但是,我确实得到了一些非常奇怪的行为。
答案 0 :(得分:3)
test[i] != '?' || test[i] != '\0'
始终为true
,因此您最终会越过数组的边界,因为i++
增量太远。
您是否想要&&
代替||
?
最后,您需要向result
插入显式NUL终止符,否则输出将是未定义的。一种简单的方法是使用
\0
的数组
char result[20] = {};
答案 1 :(得分:0)
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
using namespace std;
string test;
cout << "Enter a string without symbolic characters: ";
getline(cin, test);
if (test.find("?") != string::npos )
{
cout << "Fail.";
}
else
{
cout << test << endl;
cout << "Success.";
}
}
你可以用std :: string来做到这一点。学习C ++,而不是C。