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 =...): warning: assignment makes integer from pointer without a cast
第二个:
.c:32:12(strcpy(worker.addr,...): warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast.
我不太明白为什么会出现这两个警告。 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
实际上是错误的,至少在 99% 的情况下是这样。当您看到这种警告时,请将其视为错误。
我的代码中出现分段错误: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 =...): warning: assignment makes integer from pointer without a cast
第二个:
.c:32:12(strcpy(worker.addr,...): warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast.
我不太明白为什么会出现这两个警告。 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
实际上是错误的,至少在 99% 的情况下是这样。当您看到这种警告时,请将其视为错误。