gpt4 book ai didi

c - strlen 问题,返回正确的长度 + 2

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:34 25 4
gpt4 key购买 nike

我有一个奇怪的错误。

我写了一个获取文件并返回每行长度的函数:

void readFile1(char *argv[], int fileNumber,
char *array_of_lines[NUMBER_OF_LINES+1], int *currNumOfLines)
{
FILE* fp;
fp = fopen(argv[fileNumber], "r");
if (fp == NULL)
{
fprintf(stderr, MSG_ERROR_OPEN_FILE, argv[fileNumber]);
exit(EXIT_FAILURE);
}
char line[256];
while (fgets(line, sizeof(line), fp))
{
printf("\n line contains : %s size is : %lu\n",line,strlen(line));
}
}

该函数总是打印正确的数字 + 2,例如,如果 file.txt 仅包含一行 "AAAAA",该函数将打印长度为 7 而不是 5

 line contains : AAAAA
size is : 7

有人知道错误在哪里吗?

最佳答案

别忘了 fgets将换行符留在缓冲区中。

您似乎正在读取在 Windows 中创建的文件(其中换行符是 两个 字符 "\r\n"),而系统上只有换行符“\n”。这两个字符也是字符串的一部分,将由 strlen 计数。


我猜你在非 Windows 系统中读取 Windows 创建的文件的原因是,对于以文本模式(默认)打开的文件,读取和写入字符串的函数将翻译 操作系统相关格式的换行符。

例如在 Windows 上,当编写纯 "\n" 时,它将被翻译并实际编写为 "\r\n"。阅读时会发生相反的翻译("\r\n" 变为 "\n")。

在具有普通 "\n" 行尾的系统(如 Linux 或 macOS)上,不需要翻译,并且 "\r" 部分将被处理与任何其他角色一样。

关于c - strlen 问题,返回正确的长度 + 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53319619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com