这是我的代码给出了分段错误
#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);
}
感谢您的帮助;
答案 0 :(得分:2)
您需要为指针get
分配内存。
或者使用char数组:
char get[MAX_SIZE];
scanf("%s",get);
声明指针时,它不指向任何内存地址。您必须通过malloc
(c-style)或new
(c ++样式)为该指针显式分配内存。
您还需要分别通过free
/ delete
自行管理清理操作。
答案 1 :(得分:1)
char *get;
上述语句将get
定义为指向字符的指针。它可以存储char
类型的对象的地址,而不是字符本身。问题出在scanf
和strcmp
调用上。您需要定义一个字符数组来存储输入字符串。
#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];