因此,我正在使用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);
}
答案 0 :(得分:0)
您有一个二维数组,而不是指向字符串的指针数组。 (好吧,实际上在函数中您有一个指向char[MAXCARPORLINHA]
的指针,但这指向2D数组。)
texto[linha]
是一维字符数组。除非将sizeof
,_Alignof
或&
的操作数作为对象,否则数组将被转换为指向第一个元素的指针。
并且由于数组是现有对象,因此根据定义,其地址不能为NULL 。
执行所需操作的最简单方法是将行的数量作为类型size_t
的参数传递到函数中,而不尝试使用任何“前哨”值。 / p>
int escreverficheiro(size_t n, char texto[][MAXCARPORLINHA])