C - fgets 跳过 CR 字符
C - fgets skips CR character
我有一个c代码,只是从一个txt文件中读取一行。该文件只有一行,如下所示:
读取这一行的代码片段是:
int** readFile(char* filename){
int col=0, row =0;
int i=0;
int* numList[2048];
for(int i = 0; i<2048; i++)
numList[i] = (int*) malloc(6*sizeof(int));
if(NULL == numList){
printf("Memory error!");
}
char * token = NULL;
char currentLine[25] = {'[=10=]'};
FILE* file = fopen(filename, "r");
if(NULL != file){
printf("File is opened successfully\n");
if( NULL != fgets (currentLine, 60, file) )
{
int i = 0;
while (NULL != currentLine[i]){
printf("%d ", currentLine[i]);
i++;
}
}
}
else
{
printf("File I/O Error");
return NULL;
}
fclose(file);
return numList;
}
当这段代码运行时,我得到以下输出:
我观察到一些可疑的东西,正如您在第一个屏幕截图(txt 文件的内容)中看到的那样,Notepad++ 在该行的末尾显示了 CR LF。但在输出中,我看到 10 作为最后一个字符,即 LF。
可能我遗漏了一个非常原始的点,但是,我不明白为什么没有 CR 字符。
不用说,平台是windows,这是一个控制台程序。
谢谢&问候。
您正以文本模式打开文件。此模式确保您可以在任何平台上以相同的方式处理文本文件。
C 将 '\n'
指定为 行尾 。在 Windows 中,行 的 结尾是序列 "\r\n"
。 C(在这种情况下,实现 stdio
的标准库)会自动为您翻译。以 文本模式 读取 Windows 上的文件将只为 \r\n
.
提供 \n
如果您想准确查看文件的字节内容,则必须以 二进制模式 打开它:
FILE* file = fopen(filename, "rb");
我有一个c代码,只是从一个txt文件中读取一行。该文件只有一行,如下所示:
读取这一行的代码片段是:
int** readFile(char* filename){
int col=0, row =0;
int i=0;
int* numList[2048];
for(int i = 0; i<2048; i++)
numList[i] = (int*) malloc(6*sizeof(int));
if(NULL == numList){
printf("Memory error!");
}
char * token = NULL;
char currentLine[25] = {'[=10=]'};
FILE* file = fopen(filename, "r");
if(NULL != file){
printf("File is opened successfully\n");
if( NULL != fgets (currentLine, 60, file) )
{
int i = 0;
while (NULL != currentLine[i]){
printf("%d ", currentLine[i]);
i++;
}
}
}
else
{
printf("File I/O Error");
return NULL;
}
fclose(file);
return numList;
}
当这段代码运行时,我得到以下输出:
我观察到一些可疑的东西,正如您在第一个屏幕截图(txt 文件的内容)中看到的那样,Notepad++ 在该行的末尾显示了 CR LF。但在输出中,我看到 10 作为最后一个字符,即 LF。
可能我遗漏了一个非常原始的点,但是,我不明白为什么没有 CR 字符。
不用说,平台是windows,这是一个控制台程序。
谢谢&问候。
您正以文本模式打开文件。此模式确保您可以在任何平台上以相同的方式处理文本文件。
C 将 '\n'
指定为 行尾 。在 Windows 中,行 的 结尾是序列 "\r\n"
。 C(在这种情况下,实现 stdio
的标准库)会自动为您翻译。以 文本模式 读取 Windows 上的文件将只为 \r\n
.
\n
如果您想准确查看文件的字节内容,则必须以 二进制模式 打开它:
FILE* file = fopen(filename, "rb");