如何从 C 中的 TXT 文件中删除隐藏的换行符?

How to remove hidden line breaks from TXT file in C?

我试图从 TXT 文件中获取每一行,然后将该行传递给变量,我将在 if 语句中匹配这些变量。我的 txt 文件是:

add $t0, $t1, $t2
addi $t0, $t1, 30352

它正确地删除了逗号并将“add”、“$t0”、“$t1”、“$t2”发送到它们各自的变量,然后使用 if 语句将它们转换为二进制表示。它适用于除 $t2 之外的每个变量,因为存在某种隐藏的换行符,我一生都无法弄清楚如何删除。我的 if 语句看起来像

else if(strcmp("$t2", reg) == 0)
{
 return r10;
}

应该返回 01010 但永远不会计算为真。

如何清除 C 中的换行符?

更新:这是我阅读文件的方式

FILE *fp;
char * line = NULL;
size_t len = 0;
ssize_t read;

void sendLine()
{

//Open file, check it's not empty
fp = fopen("mymipsfile.txt", "r");
if (fp == NULL)
{
        exit(EXIT_FAILURE);
}

while ((read = getline(&line, &len, fp)) != -1) {
        printf("Retrieved line of length %zu:\n", read);
        printf("%s", line);
        remove_all_chars(line, ',');
        interpertLine(line);
        decodeLine(0);
        printf("\n");
}

fclose(fp);
if (line)
{
    free(line);
}
exit(EXIT_SUCCESS);
}

这是我如何将它拆分成变量

void interpertLine(char currentLine[])
{
   //Extract the first token
   char * token = strtok(currentLine, " ");
   op = token;
   //Loop through the string to extract all other tokens
   int i = 0;
   while( token != NULL ) {
      //printf( " %s\n", token ); //printing each token
      token = strtok(NULL, " ");
      if(i == 0)
      {
          rs = token;
      }
      else if (i == 1)
      {
          rt = token;
      }
      else if (i == 2)
      {
          rd = token;
      }
      i++;
   }
}

简单地将比较长度限制为可见字符:

else if (strncmp("$t2", reg, sizeof("$t2") - 1) == 0)
{
  return r10;
}

注意 1:我使用 'sizeof() - 1' 来防止比较尾随的空终止字节 (0),存在于每个字符串文字“....”的末尾“....”

注意 2:如果 'reg' 指向任何以“$t2”开头的字符串,例如:“$t20”、“$t2abc”等,我的解决方案将生成 'false positives'。 所以,更好的方法是将第一个不可见字符替换为 0,然后比较完整大小,如下所示:

char *tmp_reg = reg;
while (tmp_reg++)
{
  if (tmp_reg < ' ') // is invisible?
  {
    *tmp_reg = 0; // replace invisible to 0
    break; // we don't need to compare more
  }
}

// ....

else if (strcmp("$t2", reg)) == 0)
{
  return r10;
}