空时如何停止从文本文件中读取字符串

时间:2018-12-09 10:37:19

标签: c arrays string file text

因此,我正在使用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);
}

1 个答案:

答案 0 :(得分:0)

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

texto[linha]

一维字符数组。除非将sizeof_Alignof&的操作数作为对象,否则数组将被转换为指向第一个元素的指针。

并且由于数组是现有对象,因此根据定义,其地址不能为NULL


执行所需操作的最简单方法是将的数量作为类型size_t的参数传递到函数中,而不尝试使用任何“前哨”值。 / p>

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