如何修复错误:EncodeTextApp.exe中0x00007FFC284DDDFF(ucrtbased.dll)抛出异常:0xC0000005

时间:2017-02-26 08:44:12

标签: c

我昨天写了这段代码。它编译/构建正常,没有错误,并打开Windows命令提示符,要求我输入原始文本。我输入原始文本,我希望我的程序编码并按Enter键。这会导致以下错误:

  

EncodeTextApp.exe中的0x00007FFC284DDDFF(ucrtbased.dll)抛出异常:0xC0000005:访问冲突写入位置0x00007FF7CAEC9C23。

     

如果存在此异常的处理程序,则可以安全地继续该程序。

当我在程序运行时输入要在命令提示符中编码的消息时,会发生上述异常。然后它就崩溃了。

以下代码是我的应用程序中的代码。我不知道我在这里做错了什么。

#include <stdlib.h>
#include <conio.h>
#include <iostream>

#define MAX_LEN 80
#define encodingshift 17

char* encode(char* str) {
    int i = 0;
    while (str[i] != '\0') {
        str[i] = str[i] - encodingshift;
        /*str[i] = (char)((int)str[i] + encodingshift) % 26;*/
    }
return (str);
}

void main() {
    char *str = "";

    printf("Please enter the message to encode: ");
    fgets(str, MAX_LEN, stdin);
    char* original = str;

    str = encode(str);
    printf("\nOriginal Message: %s", original);
    printf("\nEncoding Shift: %d", encodingshift);
    printf("\nEncoded message: %s", str);
    getchar();
}

我已经完成了所有工作,从卸载Visual Studio中的c ++项目并重新安装它们,再次安装整个Visual Studio,但错误并没有消失。因此,我想知道我要做什么。这是阻止我使用我的程序的唯一因素。

1 个答案:

答案 0 :(得分:3)

char *str = "";

printf("Please enter the message to encode: ");
fgets(str, MAX_LEN, stdin);

错误,str是一个字符串文字(放在只读段上,因此不可修改),你需要有空间用fgets存储字符串,改为:

char str[MAX_LEN];

str = encode(str); /* str now is an array, you can not assign to */

encode(str);

请注意,您没有在i循环中增加while(无限循环)

此外,您正在混合C和C ++,不要这样做,如果您想要C,iostream应为stdio.h并使用main的有效签名:{{1而不是int main(void)