所以,我使用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);
}
2 回答
这可能不对,但我会尝试
if(array[line] == EOF) break;
.你有一个 2-dimensional array ,而不是一个指向字符串的指针数组 . (实际上,在函数中你有一个指向
char[MAXCARPORLINHA]
的指针,但指向一个2D数组) .是 1-dimensional array of characters . 除了
sizeof
,_Alignof
或&
的操作数外,数组将转换为指向第一个元素的指针 .并且由于数组是现有对象,因此根据定义,其地址不能为NULL .
执行所需操作的最简单方法是将行数作为
size_t
类型的参数传递给函数,而不是尝试使用任何"sentinel"值 .