in argv[0] è sempre presente il patch assoluto all'eseguibile (compreso il nome dell'eseguibile)

quindi, basta togliere il nome di quest'ultimo dal patch,
e sostituirlo con il nome del file da creare.

es: se il patch all'eseguibile è:
C:\Documenti\mioeseguibile.exe
basta sostituire "mioeseguibile.exe"
con il nome del file da creare.
C:\Documenti\mionuovofile.txt
codice:
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char fname[20], i, len;
    FILE *p;
    
    len=strlen(argv[0]);
    
    for(i=len; i>0; i--)
        if(argv[0][i]=='\\\') 
        {
            argv[0][++i]='\0';
            break;                        
        }    
    
    printf("Inserisci il nome del file da creare: ");
    scanf("%s", fname);
    strcat(argv[0], fname);

    p=fopen(argv[0], "w");
    fclose(p);
    
    return 0;
}