strcmp给出分段错误

时间:2014-03-20 08:20:33

标签: c pointers

这是我的代码给出了分段错误

#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);
}

感谢您的帮助;

3 个答案:

答案 0 :(得分:2)

您需要为指针get分配内存。

或者使用char数组:

char   get[MAX_SIZE];
scanf("%s",get);

声明指针时,它不指向任何内存地址。您必须通过malloc(c-style)或new(c ++样式)为该指针显式分配内存。

您还需要分别通过free / delete自行管理清理操作。

答案 1 :(得分:1)

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;
}

答案 2 :(得分:0)

确定你得到一个段错误。 你告诉你的计算机将用户输入写入未初始化的指针。

char   *get; // just a pointer that may wildly points anywhere
scanf("%s",get);

define get是一些char数组

char get[SOME_LARGE_CONSTANTS_THAT_CLEARLY_IS_LARGER_THAN_YOUR_USER_INPUT];