繁体   English   中英

C 段错误:11

[英]C-Segmentation Fault: 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) action\n");
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);
}

当我编译它时,我收到 2 个警告:

第一个:

.c:31:17(worker.addr =...): 警告:赋值从指针生成整数而不进行强制转换

第二个:

.c:32:12(strcpy(worker.addr,...): 警告:传递 'strcpy' 的参数 1 使指针从整数而不进行强制转换。

我真的不明白为什么这两个警告在这里。 worker.addr不是一个 `char*` 吗? 我在结构中定义了它。

然而,对我来说也很奇怪,我没有收到第一个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强制转换的makes integer from pointer without a cast实际上是相当错误的,至少在 99% 的情况下是这样。 当您看到此类警告时,请将其视为错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM