【问题标题】:Non-portable pointer conversion不可移植的指针转换
【发布时间】:2017-07-26 01:31:50
【问题描述】:

我正在编写一个程序,该程序从两个文件中获取字符串并将它们组合成带有组合字符串的第三个文件。

#define BUF 255

int main( void)
{
    FILE *usernames; FILE *passwords; FILE *final_file;
    char *user_str, *pass_str;
    int ct, ck;

    usernames = fopen( ".\\info_files\\usernames.txt", "r" );
    passwords = fopen( ".\\info_files\\passwords.txt", "r" );
    final_file = fopen( ".\\info_files\\usernamesPasswords.txt", "w" );

    if ( (usernames == NULL) || (passwords == NULL) || (final_file == NULL) 
    )
    {

        printf( "failed to open one of the files" );

    }

    while ( (fgets( user_str, BUF, usernames) != EOF ) && ( fgets( pass_str, BUF, passwords) != EOF)) 
    {       
        fprintf( final_file, "%-25s %s\n", user_str, pass_str );        
    }   



    fclose( usernames );
    fclose( passwords );
    fclose( final_file );

    return 0;
}

这就是给我带来麻烦的原因。我不知道是什么导致它崩溃。 这是根据第一次发布的内容进行编辑的。

【问题讨论】:

  • while(fgets(user_str, BUF, usernames) && fgets(pass_str, BUF, passwords)){ fprintf( final_file, "%-25s %s\n", user_str, pass_str ); }
  • 可能你想从user_str中删除换行符
  • != EOF --> != NULL, char *user_str, *pass_str; --> char user_str[BUF], pass_str[BUF];
  • 读取fgets的引用返回值
  • user_str 未分配也未初始化 --> fgets( user_str, BUF, usernames) --> UB。

标签: c file loops


【解决方案1】:

@BLUEPIXY 为您提供了正确的代码 - 以下是您的代码出错的解释:-

char *fgets(char *str, int n, FILE *stream)

从指定的流中读取一行并将其存储到 str 指向的字符串中。当读取 (n-1) 个字符、读取换行符或到达文件结尾(以先到者为准)时,它会停止。

返回 fgets 的值

成功时:函数返回相同的str参数

如果遇到文件结尾并且没有读取任何字符, str的内容保持不变,返回一个空指针

如果发生错误,则返回一个空指针。

来源:-C Tutorial Point

【讨论】:

  • 我看到了fgets() 的描述,但我没有看到关于 OP 如何出错的承诺解释......
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
相关资源
最近更新 更多