Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cipherLab.exe中的0x0FD61BCC(ucrtbased.dll)处引发异常:0xC0000005:访问冲突读取位置0x00000043_C_Visual Studio 2017 - Fatal编程技术网

在cipherLab.exe中的0x0FD61BCC(ucrtbased.dll)处引发异常:0xC0000005:访问冲突读取位置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", "

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

我不确定我在这里做错了什么。第一次执行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);
}
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);
    }
}