c - 如何实现在一个文件中查找单词然后写入另一个文件?

标签 c

我正在尝试用c语言制作SIC汇编器,制作了一个小测试程序来搜索“START”关键字并从汇编代码文件中获取起始地址。然后将它们作为第一遍写入另一个文件中。代码不起作用。介意告诉我有什么问题吗?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char *argv[])
{
    FILE *source;
    FILE *intermediate;
    rewind(source);
    char word[10];
    unsigned int address = 0;
    char start[5] = "START";
    source = fopen(argv[1],"r");
    intermediate = fopen(argv[2],"r+");
    while(strcmp(word,start) != 0)
    {
        fscanf(source, "%s", word);
    }
    fscanf(source, "%x", address);
    fprintf(intermediate, "%x", address);
    fprintf(intermediate, "%s", word);

    return(0);
}

这是程序集输入:

  COPY   START  1000
  FIRST  STL    RETADR
  CLOOP  JSUB   RDREC
         LDA    LENGTH
         COMP   ZERO
         JEQ    ENDFIL
         JSUB   WRREC
         J      CLOOP
  ENDFIL LDA    EOF
         STA    BUFFER
         LDA    THREE
         STA    LENGTH
         JSUB   WRREC
         LDL    RETADR
         RSUB
  EOF    BYTE   C'EOF'
  THREE  WORD   3
  ZERO   WORD   0
  RETADR RESW   1
  LENGTH RESW   1
  BUFFER RESB   4096

最佳答案

正如我和其他人在评论中指出的那样,您有几个错误。

1)使用未初始化变量(字)

2) 文件未打开时快退

3) 数组对于字符串来说太短(开始)

4) fscanf 的参数错误(地址而不是 &address)

此外还有其他问题,例如:

1) fscanf 中缓冲区溢出的风险

2)缺少对 EOF 的处理

3)缺少文件关闭

修复上述问题后,代码可能如下所示:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char *argv[])
{
    FILE *source;
    FILE *intermediate;
    char word[10];
    unsigned int address = 0;
    const char start[] = "START";

    source = fopen(argv[1],"r");       // Missing check of argc and successful file open
    intermediate = fopen(argv[2],"w"); // Missing check of argc and successful file open

    do
    {
      if (fscanf(source, "%9s", word) != 1)
      {
        printf("Illegal source file. START not found\n");
        fclose(source);
        fclose(intermediate);
        exit(1);
      }
    } while(strcmp(word, start) != 0);

    fscanf(source, "%x", &address);  // Missing check of return value being 1

    fprintf(intermediate, "%x", address);
    fprintf(intermediate, "%s", word);

    fclose(source);
    fclose(intermediate);

    return(0);
}

最后请注意,代码仍然错过了重要的检查,例如扫描地址时提供的参数数量、成功的文件打开以及 fscan 的返回值。

关于c - 如何实现在一个文件中查找单词然后写入另一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49401199/

相关文章:

c++ - 链接错误 c 和 c++( undefined reference )

c - 读取和保存未知长度字符串的已知行数

C 复杂的内存泄漏

c - 如何包含 pulseaudio 核心 header ?

c - 如何让 MinGW 交叉编译器使用与 gcc 相同的库?

c - 重定向歧义

c++ - 性能分析器 : How to use unsigned long to measure time in microseconds?

c++ - 打印浮点值时出现问题

c - 整数计算未按预期工作

c - C 是否允许在数组初始值设定项列表中使用非常量表达式?