" 逐行读取文件时的行,c,string,pointers,file-io"/>

首页 > 解决方案 > 程序可以工作,但是当我调试时它说“" 逐行读取文件时的行

问题描述

我写了这段代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *actionfpnt;
    char* line[70];
    actionfpnt = fopen(argv[1], "r");
    if (actionfpnt == NULL)
    {
        printf("Error: opening %s failed\n", "actions");
    }
    else
    {
        while (fgets(line, 70, actionfpnt) != NULL)
        {
            printf("%s\n", line);
        }
        fclose(actionfpnt);
        return 0;
    }
}

而 argv[1] 是一个 txt 文件的地址,在这个文本文件中:

Initialize
Fatal_malfunction $$$ cpu Zi7 $$$ 130
Fatal_malfunction $$$ cpu Zi5 $$$ 15
Returned_from_customer $$$ cpu Zi7 $$$ 10
Rename $$$ bloblo12zZzZ $$$ Zbloblo
Returned_from_customer $$$ Zblabla $$$ 10
Finalize

令人困惑的部分是代码实际上可以工作,但是当我尝试调试它时,我在变量“line”中看到:"<error reading characters in string.>"。输出是:

Initialize

Fatal_malfunction $$$ cpu Zi7 $$$ 130

Fatal_malfunction $$$ cpu Zi5 $$$ 15

Returned_from_customer $$$ cpu Zi7 $$$ 10

Rename $$$ bloblo12zZzZ $$$ Zbloblo

Returned_from_customer $$$ Zblabla $$$ 10

Finalize

当我尝试使用 line 执行任何其他操作时,我不能,因为“line”实际上不包含任何内容。我真的很感激一种解决这个问题的方法,并解释为什么代码工作并得到正确的输出,即使有这个问题。

标签: cstringpointersfile-io

解决方案


char line[70];不想char* line[70];

char* line[70];是一个包含 70 个指针的数组char


包括在没有额外终止的情况下fgets()阅读您想要的行尾:printf\n

  printf("%s", line);

尽管不需要格式化,但使用fputs()就足够了:

  fputs(line, stdout);

推荐阅读