c - 如何在文本文件为空时停止从文本文件中读取字符串
问题描述
因此,我使用 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);
}
解决方案
您有一个二维数组,而不是指向字符串的指针数组。(嗯,实际上在函数中有一个指向 的指针char[MAXCARPORLINHA]
,但它指向一个二维数组)。
texto[linha]
是一维字符数组。除非sizeof
,_Alignof
或的操作数&
将被转换为指向第一个元素的指针。
而且由于数组是一个现有对象,根据定义,它的地址不能是 NULL。
做你想做的最简单的方法是将行数作为类型参数传递size_t
给函数,而不是尝试使用任何“哨兵”值。
int escreverficheiro(size_t n, char texto[][MAXCARPORLINHA])
推荐阅读
- javascript - 生产中的深奥错误:`类型错误:e未定义`
- python - Seaborn:如何使用多个折线图制作子图?sns.relplot 似乎不支持它?
- apache - WAMP 服务器不允许使用“www”访问网站
- c# - 我的更新运行计算,但将相同的值更新到所有行
- json - 将变量插入 json 有效负载(松弛 webhook)问题的 Bash 脚本
- javascript - 通过 wix 代码提供 HTML 图表时的事件处理程序问题
- python - 有人可以用python和google sheet api帮我解决这个问题吗?
- javascript - 我用 Javascript 设置的一个 cookie 总是为空。其余的读得很好
- debugging - 修改符号文件对源代码文件的引用
- three.js - 具有不同三角形方向的 THREE.js 中的平滑阴影