我有一个文件,我想要他的字符串长度的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不是常数,我无法找到解决这个问题的方法。
答案 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的返回值。