首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fgets给我空

fgets给我空
EN

Stack Overflow用户
提问于 2022-10-18 21:02:46
回答 2查看 56关注 0票数 -1
代码语言:javascript
复制
#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,而它显然应该只是一个字符串。

以下是运行此代码的结果:

代码语言:javascript
复制
$ ./result.exe
digit 2
12
(null) 
EN

回答 2

Stack Overflow用户

发布于 2022-10-18 21:20:04

fgets不改变firstNumber。它不可能更改firstNumber,因为C是按值传递的。所以firstNumber还有你给它的价值,NULL

fgets应该做的是写入firstNumber所指向的内存。因此,您所做的传递NULL是一个错误。您需要传递一个指向足够内存的指针,以保存所需的值。第二个参数是内存的大小。

票数 3
EN

Stack Overflow用户

发布于 2022-10-18 21:28:28

firstNumber是一个字符串,但是当您在其声明中将它设置为NULL时,fgets不能将任何东西写入其中。这个程序因此遇到了一个分段故障。

您应该在firstNumber中插入malloc,或者将其声明更改为char firstNumber[64]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74117440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档