当我最后没有空行时,为什么 fgets() 一直跳过最后一个字母?

why does fgets() keep skipping last letter when I dont have an empty line at the end?

我想获取每一行并将其放入我的数组中。当我在文件末尾有一个空行时,这会起作用,但我需要能够处理所有行而末尾没有一行。当我读取文件时,最后一行的 ax 末尾缺少 x。这是使用的文件:

read ax
mul 2 ax
print ax

the file I get with my code:
read ax
mul 2 ax
print a

这就是我目前的情况。我该如何解决这个问题?

int row = 100;
int columns = 100;
char operation[row][columns];
FILE *fp = fopen(argv[1],"r");
//populates matrix of assembly code
while(fgets(operation[i],columns, fp)!=NULL){
  operation[i][strlen(operation[i])-1] = '[=11=]';
  i++;
} numberOfLines = i;

for(int i = 0; i < numberOfLines;i++){
   printf("%s\n",operation[i]);

}

operation[i][strcspn(operation[i], "\r\n")] = '[=10=]';

这会将第一个 '\r' 或 '\n' 设置为 '\0'

https://www.tutorialspoint.com/c_standard_library/c_function_strcspn.htm