使用变量作为文件名写入 C 中的文件

问题描述

我正在尝试使用 fopen 在 C 中写入文件,但我要写入的文件的扩展名必须是一个变量。 扩展名存储在变量 extension 中,而我要写入的文本存储在 result 中。 我尝试使用此功能,但未创建文件

void createAndWrite(char* result,char* extension){
    char buf[100];
    sprintf(buf,"%s.%s","outputFile",extension);

    FILE *fh = fopen (buf,"wb");
    if (fh != NULL) {
        fwrite (result,sizeof (result),1,fh);
        fclose (fh);
    }
}

如果我手动写入文件名,它可以完美地工作,例如FILE *fh = fopen ("outputFile.txt","wb");文件已创建且输出正确。 我还尝试使用 strcat(),snprintf() 之类的函数或指定整个文件路径,但没有任何效果。 访问扩展变量不是问题,因为如果我执行 printf("%s",buf); 我可以看到正确的文件。 我如何解决它?

解决方法

sizeof(char* result) will always result in 4 (32 bit target) or 8 (64 bit target)

除非 result 的实际长度匹配 3 或 7 个字节(还要考虑 NULL 终止符),否则错误的长度信息将导致 fwrite (result,sizeof (result),1,fh); 失败。替换为:

fwrite (result,strlen(result) + 1,fh);

旁白:(不是主要问题的一部分)关于以下内容:

char buf[100];
sprintf(buf,"%s.%s","outputFile",extension);

即使 sprintf() 确实为成功调用在结果缓冲区中附加了一个 \0 终止符,但作为规则,初始化是一个好习惯。要在字符串函数中使用的缓冲区。例如::

 char buf[100] = {0};//populates entire memory location with `nul` characters.