我绝对是初学者是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;
}
答案 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}},因为这被视为更安全的选择。