c - 如何从C中的文件读取的行中删除单个字符

标签 c

如何从 .asm 文件的“@2”中删除“@”?当从文件读取时,我的输出当前不正确,但是当仅使用“2”时,它会产生正确的二进制结果。

FILE *fp;
char buffer[256];
fp = fopen("Add.asm", "r");

if(fp == NULL){
    printf("Error opening file\n");
}
else{
    while(fgets(buffer, 256, fp) != NULL){
        buffer[strcspn(buffer, "\r\n")] = 0;
        printf("Buffer:");
        printf("%s\n",buffer);

        if(aOrC(buffer) == true){
            int changer = stringToInt(buffer);
            printf("%s\n",intToBinary(changer));
        } else if(aOrC(buffer) == false){
            char* jump = jumpBits(buffer);
            char* dest = destBits(buffer);
            char* comp = compBits(buffer);
            char* finalBits = finalBinaryC(comp, dest, jump);
            printf("%s\n", finalBits);
        }
    }
    fclose(fp);
}

下面是来自 nand2tetris 项目的 Add.asm 文件。

 @2
 D=A
 @3
 D=D+A
 @0
 M=D

最佳答案

根据您的输出,@ 始终位于字符串的开头。所以 您可以轻松地做到这一点:

// str contains the string "@2"
puts(str + (str[0] == '@' ? 1 : 0));

如果你想删除某个随机位置的@,那么你应该写一个 像这样的功能

char *remove_char(char *src, char c)
{
    if(src == NULL)
        return NULL;

    char *p = strchr(src, c);

    if(p == NULL)
        return src; // c not found

    // removing c
    memmove(p, p+1, strlen(p));

    return src;
}

然后你可以这样调用它

char line[] = "abc@def";
puts(remove_char(line, '@'));

这将打印abcdef

关于c - 如何从C中的文件读取的行中删除单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061889/

相关文章:

c++ - C - C++ 在程序中嵌入 Makefile

c++ - 奇怪的十六进制格式

c - 从多个循环输入打印输出

C - int 和 malloc

c - 图表可以实现为列表吗?

将字符数组转换为C中的整数数组

c++ - 如何使用 libgeotiff 将坐标写入 TIF 文件

C服务器套接字的读函数写脏缓冲区

c - C程序中的fork()

c - 如何将 R 函数包装为 C 库