1. ホーム
  2. その他

[解決済み] strcmpがセグメンテーションフォールトを出す [重複]。

2022-01-17 05:34:33

質問

これはセグメンテーションフォールトを発生させる私のコードです。

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(void) {
    char *get;
    scanf("%s", get);
    int k = strcmp("sachin", get);
    printf("%d", k);
}

ありがとうございました。

解決方法は?

char *get;

上記のステートメントで定義された get を文字へのポインタとする。型のオブジェクトのアドレスを格納することができます。 char 文字そのものではありません。問題は、両方の scanfstrcmp を呼び出します。入力文字列を格納するために、文字の配列を定義する必要があります。

#include <stdio.h>
#include <string.h>

int main(void) {
    // assuming max string length 40
    // +1 for the terminating null byte added by scanf

    char get[40+1];

    // "%40s" means write at most 40 characters
    // into the buffer get and then add the null byte
    // at the end. This is to guard against buffer overrun by
    // scanf in case the input string is too large for get to store

    scanf("%40s", get);
    int k = strcmp("sachin", get);
    printf("%d", k);

    return 0;
}