我有一个文件,我想要他字符串长度的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的返回值