C 为什么fgets()总是跳过最后一个字母,而我的末尾没有空行?

C 为什么fgets()总是跳过最后一个字母,而我的末尾没有空行?,c,fgets,C,Fgets,我想得到每一行并把它放到我的数组中。当我在文件的末尾有一个空行时,这就行了,但我需要能够处理所有行,而不必在末尾有一行。当我读取文件时,最后一行的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][co

我想得到每一行并把它放到我的数组中。当我在文件的末尾有一个空行时,这就行了,但我需要能够处理所有行,而不必在末尾有一行。当我读取文件时,最后一行的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] = '\0';
  i++;
} numberOfLines = i;

for(int i = 0; i < numberOfLines;i++){
   printf("%s\n",operation[i]);
int行=100;
int列=100;
字符操作[行][列];
文件*fp=fopen(argv[1],“r”);
//填充汇编代码的矩阵
while(fgets(操作[i],列,fp)!=NULL){
操作[i][strlen(操作[i])-1]='\0';
i++;
}numberOfLines=i;
对于(int i=0;i
}

这将第一个“\r”或“\n”设置为“\0”


您正在将读取的行的最后一个字符设置为0,但没有首先确定它是换行符……您能详细说明一下吗?这在哪里起作用?@Julian您是什么意思?它可以与任何字符串一起工作。我是在操作后放置它,还是替换它?因为当我用我的线路替换它时,我得到了一个error@Julian你包括了吗?
operation[i][strcspn(operation[i], "\r\n")] = '\0';