#include <stdio.h>
#include <stdlib.h>
int main () {
int firstDigit;
char *firstNumber = 0;
char operator;
int secondDigit;
char *secondNumber = 0;
printf("digit ");
scanf("%d *[^\n]", &firstDigit);
fgets(firstNumber, firstDigit, stdin);
printf("%s \n", firstNumber);
}这里的代码将null作为firstNumber,而它显然应该只是一个字符串。
以下是运行此代码的结果:
$ ./result.exe
digit 2
12
(null) 发布于 2022-10-18 21:20:04
fgets不改变firstNumber。它不可能更改firstNumber,因为C是按值传递的。所以firstNumber还有你给它的价值,NULL。
fgets应该做的是写入firstNumber所指向的内存。因此,您所做的传递NULL是一个错误。您需要传递一个指向足够内存的指针,以保存所需的值。第二个参数是内存的大小。
发布于 2022-10-18 21:28:28
firstNumber是一个字符串,但是当您在其声明中将它设置为NULL时,fgets不能将任何东西写入其中。这个程序因此遇到了一个分段故障。
您应该在firstNumber中插入malloc,或者将其声明更改为char firstNumber[64]
https://stackoverflow.com/questions/74117440
复制相似问题