尝试创建字符串时,表达式必须具有常量值

时间:2015-06-09 21:42:55

标签: c string file const

我有一个文件,我想要他的字符串长度的20%,所以我首先找到他的全长,然后找到20%,现在我想创建一个字符串,它的大小是那个20%。我写了这部分代码:

int findres=0;
    int len, partlen;
    FILE *fp;
    if ((fopen_s(&fp, fname, "rb")) != NULL)
    {
        return(-1);
    }
    fseek(fp, 0, SEEK_END);
    len = ftell(fp);
    partlen = (len * 20) / 100;
    char temp[partlen];
    while ((fgets(temp, partlen, fp)) != NULL)
    {
        if ((strstr(temp, str)) != NULL)
        {
            fprintf(fs, "%s INFECTED\n", fname);
            findres++;
        }
    }

现在'它不会让我编译,因为它说我不能把partlen作为temp的大小,因为partlen不是常数,我无法找到解决这个问题的方法。

1 个答案:

答案 0 :(得分:-1)

在C中,数组的存储在编译时分配,它位于可执行文件的堆栈部分。因此,代码中数组的大小是在运行时确定的;这是一个错误。

你必须使用动态内存分配函数,它们是标准中的malloc,calloc和realloc。

char *pStr; /* A pointer to keep the start address of the allocated memory in run-time */
pStr = malloc( sizeof(char) * partlen );

之后,您必须控制malloc的返回值。