0

このコードを使用してコンソールから入力を取得しようとしていますが、実行して最初の可能な入力を入力しようとするたびに、あるメモリ位置でランタイム例外が発生します。VisualStudio2010を使用しています。MingWとDevC++でも同じ問題が発生しました。ただし、コードは古いTurboC3コンパイラで正常に実行されました。

int Nowhere(int x);
...
char* AtBashEncrypt(char* message);
char* AtBashDecrypt(char* encrypted);

int main()
{
    char *input = "", *ciphertext = "", *plaintext = "";
    system("cls");
    printf("AtBash Cipher\nEnter a string to be encrypted: ");
    gets(input); //this is where I get the error
    ciphertext = AtBashEncrypt(input);
    ...
    getch();
}

何が間違っている可能性がありますか?

4

1 に答える 1

1
 char *input = "";

読み取り専用メモリにある文字列リテラルを指すポインタであり、その内容を変更することはできません。そうしようとすると、未定義の動作が発生します。必要なのは配列です。

#define MAX_SIZE 256
char input[MAX_SIZE]="";

良い読み物:
char a [] =?string ?;の違いは何ですか?およびchar*p =?string?;?

また、getsの代わりにfgetsを使用する必要があります

于 2013-03-08T03:56:54.617 に答える