You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用'\n'字符终止get函数的文件读取操作

问题分析与解决

你的代码逻辑存在顺序错误,导致无法在读取到换行符时停止。原循环中crypt[j] != '\n'的判断发生在读取字符之前,此时crypt[j]是未初始化的随机值,而且即使读到换行符,也会先将其存入数组再执行j++,下一次循环判断的是下一个未读取的数组位置,自然无法终止循环。

修正方案

推荐采用先读取字符、再判断停止条件的写法,既避免未初始化值的干扰,又能精准在换行符处停止:

int j = 0;
char ch;
// 循环条件:数组还有空间(留1位存字符串结束符)、读取成功、未读到换行符
while (j < MAX_CHAR - 1 && InFile.get(ch) && ch != '\n') {
    crypt[j++] = ch;
}
// 给字符数组添加字符串结束符,避免后续操作出现乱码
crypt[j] = '\0';

方案说明

  • 先通过InFile.get(ch)读取字符,成功读取后再判断是否为换行符,逻辑更可靠
  • j < MAX_CHAR - 1确保数组不会越界,预留一位给'\0'(C风格字符串必须的结束标记)
  • 当读到换行符时,循环直接终止,不会将换行符存入数组(如果需要保留换行符,可调整逻辑:先存入再判断)

原代码问题拆解

原代码的执行流程是:

  1. 判断j < MAX_CHAR、未到文件尾、crypt[j] != '\n'(此时crypt[j]未读取,值随机)
  2. 读取字符到crypt[j]
  3. j++
    当读到换行符时,步骤2已经将换行符存入数组,步骤3让j自增,下一次循环判断的是crypt[j](新的未读取位置),因此无法触发停止条件。

内容的提问来源于stack exchange,提问作者lilcrack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:25:21