C分段故障:11



我的代码中出现了分段错误:11,我不知道为什么。我是在第二次fgets之后得到的。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Worker {
char*  name,addr,days;
} Worker;
int main(){
printf("You chose the 1st (New Data) actionn");
printf("Please give your name (Max 20 character):  ");
int const maxNameLength = 20;
Worker worker;
char tmpName[maxNameLength];
fgets(tmpName,maxNameLength,stdin);
worker.name = (char*)malloc(sizeof(char)*(strlen(tmpName)+1));
strcpy(worker.name,tmpName);
printf("n");
printf("Please give your address (Max 30 character): ");
int const maxAddrLength = 30;
char tmpAddr[maxAddrLength];
fgets(tmpAddr,maxAddrLength,stdin);
worker.addr = (char*) malloc(sizeof(char)*(strlen(tmpAddr)+1));
strcpy(worker.addr,tmpAddr);
printf("n");
free(worker.name);
}

当我编译它时,我得到两个警告:

第一个:

.c:3:17(worker.addr=…(:警告:赋值从没有强制转换的指针生成整数

第二个:

.c:32:12(strcpy(worker.addr,…(:警告:传递"strcpy"的参数1会使指针从整数变为不带强制转换。

我真的不明白为什么会出现这两个警告。worker.addr不是一个"字符"吗?我在结构中定义了它。

然而,我也很奇怪,第一次worker.addr任务我没有得到任何警告,只是第二次。

这并不是你想象的那样:

typedef struct Worker {
char*  name,addr,days;
} Worker;

它相当于

typedef struct Worker {
char *name;
char addr;
char days;
} Worker;

这些信息应该足以让你找出问题所在。

顺便说一句,警告makes integer from pointer without a cast实际上是相当错误的,至少在99%的情况下是这样。当您看到这种警告时,请将其视为错误。

相关内容

  • 没有找到相关文章

最新更新