-4

異なるメモリ位置に 2 つの文字列を入力したいのですが、最初の入力を行った後、「セグメンテーション違反 (コア ダンプ)」というエラーが表示されます。このコードの何が問題なのかわかりません。

#include <stdio.h>
#include<iostream>
using namespace std;

int main()
{
    char *str;
    int i;
    scanf("%s",str+0);
    scanf("%s",str+1);
    return 0;
}

しかし、入力を 1 つだけ取得すると、正常に動作します。

#include <stdio.h>
#include<iostream>
using namespace std;

int main()
{
    char *str;
    int i;
    scanf("%s",str+0);

    return 0;
}

なんで?

4

1 に答える 1

6

strで使用する前にメモリを割り当てないためですscanf()

いくつかのメモリを割り当てる必要がありますmalloc()

安全でないメモリにアクセスしようとすると、両方のコードが未定義の動作を示します。

于 2015-05-01T10:04:51.747 に答える