c-在cipherLab.exe中的0x0FD61BCC(基于ucrt.dll)处引发异常:0xC0000005:读取位



我正在创建一个程序,该程序将文件读取为字符串,并将所有字符大写,并删除任何非字母的内容。

我不知道我在这里做错了什么。在第一次执行else语句后,我收到一个异常:

"读取位置0x00000043的访问违规">

我不知道这意味着什么,也不知道如何更正。
如有任何帮助,我们将不胜感激。

这是我的代码:

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] == ''))
{
printf("%sn", plainText[textFileElement]);
}
else
{
printf("%sn", plainText[textFileElement]);
}
}
printf("n");
}
fclose(fpCongress);
}

Thx用于编辑正确的缩进。

这是您的问题:

for (textFileElement = ''; textFileElement < strlen(plainText); ++textFileElement)
{
if (!(plainText[textFileElement] >= 'A' && plainText[textFileElement] <= 'Z'
|| plainText[textFileElement] == ''))
{
printf("%sn", &plainText[textFileElement]);
}
else
{
printf("%sn", plainText[textFileElement]);
}
}

在第二次打印时,您忘记获取地址,因此printf函数尝试读取plainText[textFileElement]位置的字符串,而不是它的位置。

这是更正后的代码:

for (textFileElement = ''; textFileElement < strlen(plainText); ++textFileElement)
{
if (!(plainText[textFileElement] >= 'A' && plainText[textFileElement] <= 'Z'
|| plainText[textFileElement] == ''))
{
printf("%sn", plainText + textFileElement);
}
else
{
printf("%sn", plainText + textFileElement);
}
}

还借此机会向你展示了另一种写这篇文章的方法,说明你正在使用指针。

顺便说一句,这解决了您的segfault错误,但可能仍然没有给出所需的行为,因为您的原始代码对此并不清楚。

最新更新