加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

fgets()在main()之外意外行为

发布时间:2020-12-16 10:02:40 所属栏目:百科 来源:网络整理
导读:我正在尝试在名为“a_function()”的函数中运行fgets(). int a_function(){ char* str; FILE *fp; fp = fopen( "./file.txt","r" ); if( NULL != fp ){ fgets( str,6,fp ); printf( "%sn",str ); }else{ printf( "cannot find filen" ); return 1; } retur
我正在尝试在名为“a_function()”的函数中运行fgets().

int a_function(){
    char* str;
    FILE *fp;

    fp = fopen( "./file.txt","r" );
    if( NULL != fp ){
        fgets( str,6,fp );
        printf( "%sn",str );
    }else{
        printf( "cannot find filen" );
        return 1;
    }
    return 0;
}

int main(void){

    a_function();

    return 0;

}

但是这样做会导致在调用fgets()函数时发生段错误.有趣的是,我可以将我的代码从a_function逐字复制到我的main()函数中,一切运行正常:

#include <stdio.h>
#include <stdlib.h>

int a_function(){

    return 0;
}

int main(void){

    a_function();
    char* str;
    FILE *fp;

    fp = fopen( "./file.txt",str );
    }else{
        printf( "cannot find filen" );
        return 1;
    }
    return 0;

}

代码正在通过以下方式编译:

gcc -g -std=c11 test.c -o test

我在这里错过了什么?这是我的代码或我的电脑的问题?任何帮助表示赞赏.谢谢

解决方法

char* str;
fgets( str,fp );

在这两种情况下你都在做上面的代码,这里没有初始化str,它包含不确定的值,输入到它会导致未定义的行为.两种情况都是不正确的,即使它有时也不会崩溃.

尝试执行以下操作:

char str[6];
fgets(str,sizeof str,fp);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读