struct employee {
int employeeId;
double payrate;
char *inputname;
};
int main (void){
//remember the struct before employee
struct employee davidB;
fgets(davidB.inputname, 20, stdin);
davidB.employeeId = 1;
davidB.payrate = 45020.50;
printf("The employees name is %s\n The employees id num is %d\n The employees payrate is %f\n", davidB.inputname, davidB.employeeId, davidB.payrate);
struct employee ericG;
printf("Please enter employee name, id number, and payrate\n");
scanf("%s", ericG.inputname);
scanf("%d", &ericG.employeeId);
scanf("%lf", &ericG.payrate);
printf("The employees name is %s\n The employees id num is %d\n The employees payrate is %f\n", ericG.inputname, ericG.employeeId, ericG.payrate);
return 0;
}
私の質問は次のとおりです。
fgets(davidB.inputname, 20, stdin);
scanf("%s", ericG.inputname);
最初のものはなぜ機能し、2番目のものはスタックオーバーフローを引き起こすのですか? さらに、「文字列」をポインターに直接割り当てることができるのはいつですか? また、事前定義された char 配列である必要があるのはいつですか?
例えば:
const char *string = "Hey"; //works? so can't I do the same with the scanf above?