C 不使用任何内存分配函数的free()函数

C 不使用任何内存分配函数的free()函数,c,database,free,C,Database,Free,我正在为学生数据库编写代码,希望删除包含卷号、名称和标记的字符串。但我在代码前面没有使用任何结构或内存分配函数。free函数仍然可以像我使用的那样用来删除字符串吗?有没有办法不用malloc和calloc来删除该字符串 void del() ` { char *str; FILE *fp; char ch[20],ch1[20]; fp=fopen("database.txt","a"); printf("enter ro

我正在为学生数据库编写代码,希望删除包含卷号、名称和标记的字符串。但我在代码前面没有使用任何结构或内存分配函数。free函数仍然可以像我使用的那样用来删除字符串吗?有没有办法不用malloc和calloc来删除该字符串

void del()                  `
{
    char *str;
    FILE *fp;
    char ch[20],ch1[20];
    fp=fopen("database.txt","a");
    printf("enter roll to be deleted:");
    scanf("%s",&ch1);
    while(fscanf(fp,"%s",ch)!=EOF)
{
    if(strcmp(ch,ch1)==0)
    {
    str=&"%s";
    free(str);
    }
}
引用
free()
手册页(键入
man3 free
):

free()函数释放ptr指向的内存空间,该内存空间必须由以前对malloc()、calloc()或realloc()的调用返回。否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为


因此,在静态分配的内存上调用
free
是未定义的(即,您不能假设任何事情,它可能会做一些事情、什么也不做、崩溃、破坏地球等等)

此代码不会编译。
free()
应该只在您分配的内存上调用,或者在null上调用,只要有malloc/calloc(或realloc)那么多空闲内存就可以调用。这段代码中没有,并且
str=
行被打断。@RingØ如果我不想使用malloc或calloc,有没有办法删除该字符串?如果该字符串不是动态分配的,您没有理由删除它(它是自动完成的,无论是在函数死亡时,还是在程序进程死亡时…)