c - 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) 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
实际上是相当错误的,至少在 99% 的情况下。当您看到这种警告时,请将其视为错误。
推荐阅读
- python - 我们如何使用 python 从 azure 函数连接 aws transcribe
- kubernetes - kubeclt get volumesnapshots 输出中的 SOURCESNAPSHOTCONTENT 字段代表什么?
- javascript - 如何转换 unicode F1 表情符号以在电报中使用
- flutter - 在颤动中获取父小部件高度
- android - 如何在 ScrollView 上重叠 RecyclerView
- java - Access-Control-Allow-Headers 在预检响应中不允许请求标头字段 ack,即使服务器已经允许它
- python - Flask 文件大小限制 - 413 错误关闭连接
- excel - 如何在 Excel VBA 上编码字母数字序列号(USABC001 到 USABC002)
- python - 尽管使用了绘图功能,为什么我的地块比其他地块低 1?
- python-3.x - 当列的字符串值与给定列表中的任何对象未找到匹配项时,如何删除完整的行?