在cipherLab.exe中的0x0FD61BCC(ucrtbased.dll)处引发异常:0xC0000005:访问冲突读取位置0x00000043
我正在创建一个程序,将文件读入字符串,并将所有字符大写,删除任何非字母的内容 我不确定我在这里做错了什么。第一次执行else语句后,我收到一个异常: “访问冲突读取位置0x00000043” 我不知道这意味着什么,甚至不知道如何纠正它。在cipherLab.exe中的0x0FD61BCC(ucrtbased.dll)处引发异常:0xC0000005:访问冲突读取位置0x00000043,c,visual-studio-2017,C,Visual Studio 2017,我正在创建一个程序,将文件读入字符串,并将所有字符大写,删除任何非字母的内容 我不确定我在这里做错了什么。第一次执行else语句后,我收到一个异常: “访问冲突读取位置0x00000043” 我不知道这意味着什么,甚至不知道如何纠正它。 任何帮助都将不胜感激 这是我的密码: int main(void) { char plainText[300], message; char cipherText[300]; fpOutput = fopen("csis.txt", "
任何帮助都将不胜感激 这是我的密码:
int main(void)
{
char plainText[300], message;
char cipherText[300];
fpOutput = fopen("csis.txt", "w");
processFile(plainText);
cipher(cipherText, plainText);
fclose(fpOutput);
return 0;
}
//reads file into string
void processFile(char plainText[], int size)
{
int textFileElement = 0;
char textFile;
if (!(fpCongress = fopen("congress.txt", "r")))
{
puts("File could not be opened for input");
exit(1);
}
while (!feof(fpCongress))
{
for (textFileElement = 0; textFileElement < strlen(plainText); textFileElement++)
{
textFile = getc(fpCongress);
plainText[textFileElement] = textFile;
//checks for lowercase letters in string
if (islower(plainText[textFileElement]))
{
//capitalizes all lower case letters in strings
putchar(toupper(plainText[textFileElement]));
}
}
for (textFileElement = 0; textFileElement < strlen(plainText); ++textFileElement)
{
//removes any special characters and spaces
if (!(plainText[textFileElement] >= 'A' && plainText[textFileElement] <= 'Z'
|| plainText[textFileElement] == '\0'))
{
printf("%s\n", plainText[textFileElement]);
}
else
{
printf("%s\n", plainText[textFileElement]);
}
}
printf("\n");
}
fclose(fpCongress);
}
int main(无效)
{
字符明文[300],消息;
字符密文[300];
fpOutput=fopen(“csis.txt”,“w”);
进程文件(纯文本);
密码(密文、明文);
fclose(fpOutput);
返回0;
}
//将文件读入字符串
无效进程文件(字符明文[],整数大小)
{
int textFileElement=0;
字符文本文件;
如果(!(fpCongress=fopen(“congress.txt”,“r”))
{
puts(“无法打开文件进行输入”);
出口(1);
}
而(!feof(fpCongress))
{
对于(textFileElement=0;textFileElement 如果(!(明文[textFileElement]>='A'&&plainText[textFileElement]Thx,用于编辑正确的缩进
这是你的问题:
for (textFileElement = '\0'; textFileElement < strlen(plainText); ++textFileElement)
{
if (!(plainText[textFileElement] >= 'A' && plainText[textFileElement] <= 'Z'
|| plainText[textFileElement] == '\0'))
{
printf("%s\n", &plainText[textFileElement]);
}
else
{
printf("%s\n", plainText[textFileElement]);
}
}
我还借此机会向您展示了另一种写这篇文章的方法,明确说明您正在使用指针
顺便说一句,这可以解决您的segfault错误,但可能仍然无法提供所需的行为,因为您的原始代码对此并不清楚。您的for循环似乎对它们是处理字符还是索引感到困惑,您能否澄清它们是如何工作的?for循环旨在处理字符,但我开始思考我这样做是错误的。代码旨在将文件读入字符串,删除所有特殊字符和空格,以及将所有小写字母大写,然后将其打印到控制台上。您建议的更改确实解决了异常,但它也会一次又一次地打印字符串。每次从开头删除一个字符,然后我不认为这是你想做的。我会在本周晚些时候调查一下,看看我能不能想出点什么。
for (textFileElement = '\0'; textFileElement < strlen(plainText); ++textFileElement)
{
if (!(plainText[textFileElement] >= 'A' && plainText[textFileElement] <= 'Z'
|| plainText[textFileElement] == '\0'))
{
printf("%s\n", plainText + textFileElement);
}
else
{
printf("%s\n", plainText + textFileElement);
}
}