我正在创建一个程序,它将文件读入字符串,并将所有字符大写,并删除所有非字母的字符。
我不确定我在这里做错了什么。第一次执行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] == '\0'))
{
printf("%s\n", plainText[textFileElement]);
}
else
{
printf("%s\n", plainText[textFileElement]);
}
}
printf("\n");
}
fclose(fpCongress);
}
答案 0 :(得分:0)
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]);
}
}
在第二张照片上,您忘记了地址,因此printf函数尝试读取位置plainText[textFileElement]
而不是位置的字符串。
已更正代码:
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);
}
}
还借此机会向您展示了另一种编写方法,表明您正在使用指针。
这可以解决您的段错误,但仍然可能无法达到预期的效果,因为您的原始代码尚不清楚。