strlen问题,returns正确的长度+2
strlen problems, returns the right length + 2
我有一个奇怪的错误。
我写了一个函数获取一个文件和returns每一行的长度:
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"
部分将被视为任何其他字符。
printf("\n line contains : %s size is : %lu\n",line,strlen(line));
这里有赠品
获得输出
line contains : AAAAA
size is : 7
预期输出
line contains : AAAAA size is : 7
我有一个奇怪的错误。
我写了一个函数获取一个文件和returns每一行的长度:
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"
部分将被视为任何其他字符。
printf("\n line contains : %s size is : %lu\n",line,strlen(line));
这里有赠品
获得输出
line contains : AAAAA size is : 7
预期输出
line contains : AAAAA size is : 7