我有一個c代碼,只是從txt文件中讀取一行。該文件只有一個行是如下:C - fgets跳過CR字符
的代碼片段閱讀這條線是:
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] = {'\0'};
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文件的內容)中看到的那樣,Notepa d ++在行尾顯示CR LF。但在輸出中,我看到10是LF的最後一個字符。
也許我錯過了一個非常原始的點但我不明白爲什麼CR字符不存在。
不用說,平臺是Windows,這是一個控制檯程序。
謝謝&此致敬禮。
1)在Windows環境中,相互轉換(LF <-> CRLF)是在文本模式輸入/輸出中完成。 – BLUEPIXY
2)'60' <->'25'不符合大小。 – BLUEPIXY
您已將'numList'聲明爲具有自動存儲類的數組(即它是堆棧中的局部變量),並且在函數結尾處有'return numList;'。這將返回一個指向棧上變量的指針,這會導致_undefined behavior_。 –