首页 > 解决方案 > 如何在文本文件为空时停止从文本文件中读取字符串

问题描述

因此,我使用 fgets 将文本文件中的字符串获取到数组的不同行中,每个字符串都是一行。但毕竟,当我运行程序然后将输出写入另一个文本文件时,它写入的有用字符串都是正确的,但在最后一个之后,因为我必须使用数组行的定义,值为 1000,它打印垃圾,随机字符。我试图让一个 int 读取它从第一个文本文件中读取的有用字符串,但没有奏效。还尝试使用 if(array[line] == '\0') break; 没用。如何使它在最后一个有用的字符串之后停止 fprintf ?谢谢,这是我必须编写和加密字符串的代码。

void cifrar(char texto[MAXLINHAS][MAXCARPORLINHA], unsigned int cifra)
{
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {   
        for(int coluna = 0; coluna < strlen(texto[linha]); coluna++)
        {
            if(texto[linha][coluna] < 'A' || texto[linha][coluna] > 'Z') continue;
            else texto[linha][coluna] = texto[linha][coluna] + cifra;
            if(texto[linha][coluna] > 'Z') texto[linha][coluna] = texto[linha][coluna] - 26;
        }
    }
}

int escreverficheiro(char texto[MAXLINHAS][MAXCARPORLINHA])
{
    FILE * fp;
    fp = fopen("cifrado.txt", "w");
    if(fp==NULL)
    {
        printf("Erro ao escrever ficheiro.");
        return (-1);
    }
    for(int linha = 0; linha < MAXLINHAS; linha++)
    {
        if(texto[linha] == NULL) break;
        fprintf(fp, "%s", texto[linha]);
    }

    fclose(fp);
    return (1);
}

标签: carraysstringfiletext

解决方案


您有一个二维数组,而不是指向字符串的指针数组。(嗯,实际上在函数中有一个指向 的指针char[MAXCARPORLINHA],但它指向一个二维数组)。

texto[linha]

是一维字符数组。除非sizeof,_Alignof或的操作数&将被转换为指向第一个元素的指针。

而且由于数组是一个现有对象,根据定义,它的地址不能是 NULL


做你想做的最简单的方法是将数作为类型参数传递size_t给函数,而不是尝试使用任何“哨兵”值。

int escreverficheiro(size_t n, char texto[][MAXCARPORLINHA])

推荐阅读