分段故障:基本单源C程序中的11

时间:2015-12-25 12:35:07

标签: c string char segmentation-fault scanf

我绝对是初学者是C,所以请耐心等待。 我收到了一个分段错误:我在运行代码后直接输入了我的名字。当我编译它时从来没有任何错误,所以我真的不确定我做错了什么。如果这会影响任何事情,我也会在Mac上。

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

typedef struct {
    char * name;
    char * pass;
} user;

void prompt(user u) {
    char passw;
    char name;
    printf("Enter your name:\n");
    scanf("%s", &name);
    if (strncmp(u.name, &name, strlen(u.name)) == 1) {
        printf("Correct! Please input password:\n");
        scanf("%s", &passw);
        if (strncmp(u.pass, &passw, strlen(u.pass)) == 0) {
            printf("Congrats! you got in.\n");
        }
    }
}

int main() {
    user me;
    me.name = "Me";
    me.pass = "1234";
    prompt(me);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这里的问题是变量类型name和相应的格式说明符。您将其定义为char,但您使用%s来扫描该值。它会导致绑定溢出,从而创建undefined behavior

你需要让name成为一个数组,比如

 char name[64] = {0};  //size is for demo

和,使用scanf()之类的

 scanf("%63s", name);

同样适用于passw

FWIW,%s用于扫描字符串,而要接收单个char,则需要使用%c格式说明符。

另外,您可以考虑查看fgets()的{​​{3}},因为这被视为更安全的选择。