Я получил ошибку сегментации: 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, ...): предупреждение: передача аргумента 1 'strcpy' делает указатель из целого числа без приведения.
Я действительно не понимаю, почему эти два здесь есть предупреждения. Разве это worker.addr
не `char *` `? Я определил это в структуре.
Однако мне также странно, что я не получил никакого предупреждения в первый раз worker.addr
присваивание, только для второго.