C语言 表达式在创建字符串时必须有一个常量值



我有一个文件,我想要他字符串长度的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 INFECTEDn", fname);
            findres++;
        }
    }

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

在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的返回值

相关内容

  • 没有找到相关文章