从输入中删除注释的 C 函数

标签 c function comments

我是 C 语言新手,正在尝试用 C 语言编写自己的函数,以清除给定输入代码中的注释。然而,我的逻辑存在一些错误,因为结果甚至没有接近预期。

我的代码如下:

char *removeComments(char *in)
{
    int i;
    int multipleLineFlag = 0;
    int singleLineFlag = 0;
    int n = strlen(input);
    char* output = malloc(n * sizeof(char));

    for (i=0; i<n; i++)
    {
        if (in[i] == '/' && in[i+1] == '*')
        {
            i++;
            multipleLineFlag = 1;
        }
        else if (multipleLineFlag == 1 && in[i] == '*' && in[i+1] == '/')
        {
            i++;
            multipleLineFlag = 0;
        }
        else if (in[i] == '/' && in[i+1] == '/')
        {
            i++;
            singleLineFlag = 1;
        }
        else if (singleLineFlag == 1 && in[i] == '\n')
        {
            singleLineFlag = 0;
        }
        else if (multipleLineFlag == 0 && singleLineFlag == 0)
        {
            out[i] = in[i];
        }
        i++;
    }    
    free(in);
    return out;
}

还有其他人能够在代码中找到我的错误吗?

最佳答案

您的代码的一个明显问题是这一行:

out[i] = in[i];

您需要使用 2 个不同的变量来跟踪您在输入和输出字符串中的位置,因为它们会有所不同。例如,如果输入字符串包含“foo/* test */bar”,则输出应包含“foo bar”,但您当前实际得到的是“foo [10 undefined strings] bar”。如果幸运的话,那些未定义的字符将是 NUL。

另一个问题是您没有在输出末尾添加 NUL。如果输入不包含注释,那么您将很难做到这一点,因为您没有分配足够的空间 - 因此,除了在末尾添加 NUL 之外,您还需要比当前多分配 1 个字符。

关于从输入中删除注释的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44762512/

相关文章:

comments - 如何从 facebook 中的 url 获取所有评论?

c - 为什么 sizeof(x++) 不增加 x?

c - C语言中将变量放入数组中

C语言: How to share a struct (or,如果不可能,一个数组)通过IPC在父子( fork )进程之间?

c - 仅当第一个函数在 C 中执行时如何取消第二个函数?

emacs - 源代码注释中的交叉引用

C 虚拟地址到物理地址的映射

c++ - 如何确定用户是否为默认参数指定了值?

c++ - 计算字节超过二进制函数的最小和最大超出量

javascript - 井号 (#) 作为评论的开始在 JavaScript 中?