C fopen用变量名调用?

时间:2013-05-07 17:32:43

标签: c file-io

是否存在以下情况? (我试图提取变量的值,并根据存储在数组中的文本创建一个文件。)

#include <stdio.h>

int main()
{
    char a = "a"; 
    FILE *out;
    out = fopen( "%s.txt", a, "w" );
    fclose(out);
    return 0;
}

由于

10 个答案:

答案 0 :(得分:9)

  

是否存在下列情况有效的情况?

没有


不要做出假设! 请改为阅读手册。这真的很值得。

char buf[0x100];
snprintf(buf, sizeof(buf), "%s.txt", random_string);
FILE *f = fopen(buf, "r");

答案 1 :(得分:4)

不直接。但你可以间接地做到如下(或类似的东西)......

#include <stdio.h>

int main()
{
    char* a = "a"; 
    char* extension = ".txt";
    char fileSpec[strlen(a)+strlen(extension)+1];
    FILE *out;

    snprintf( fileSpec, sizeof( fileSpec ), "%s%s", a, extension );

    out = fopen( fileSpec, "w" );
    fclose(out);
    return 0;
}

答案 2 :(得分:1)

您不能使用字符串文字指定char变量。您应该将代码更改为:

char a[] = "a";

另一个问题是fopen函数只获得2个参数,但是你传递了3个。

答案 3 :(得分:1)

不,那不行。您需要使用sprintf()之类的中间步骤来组合要传递给fopen()的字符串。

答案 4 :(得分:0)

您需要详细了解fopen()

  

FILE * fopen(const char * filename,const char * mode);

     

打开文件

     

打开名称在参数filename中指定的文件,并将其与a关联   可以通过返回的FILE指针在将来的操作中识别的流。

此后如何修复您的代码

#include <stdio.h>

main(){

char a = 'a';
char filename[64];

FILE *out;
sprintf(filename, "%c.txt", a)

out = fopen( filename, "w");

fclose(out);

return 0;
}

答案 5 :(得分:0)

不,你必须事先将sprintf()转换为字符串,然后像往常一样调用fopen(name,mode)。

答案 6 :(得分:0)

我知道这个帖子已经关闭,但@很快的评论告诉我一个方法。

#include<stdio.h>
#include<stdlib.h>

    void main()
    {
      FILE *fs;
      char c[]="Dayum.csv";
      fs = fopen( ("%s", c),"a");
      if (fs == NULL)
        printf("Couldn't open file\n");
        for (int i=0; i<5; i++)
          for (int j=0; j<5; j++)
            fprintf(fs, "%lf,%lf\n",i,j);
    fclose(fs);
    }

由于fopen使用2个参数,我们可以将其伪装为单个参数 -

fs = fopen( ("%s", c), "a" )

但是,如果您决定在

中添加文件扩展名
char c[]="Dayum";
fs = fopen( ("%s.csv",c), "a")

它没有用。系统创建一个名为&#34; Dayum&#34;它被处理为普通文本文件,而不是csv格式。

注意 - 如果您可以将扩展名的值存储在一个文件中,将文件名的值存储在另一个文件中,则将它们连接起来编写一个filename.extension数组,这也是为了达到目的。

答案 7 :(得分:0)

为了解决这个问题,我做到了:

#include <string.h>

int main()
{
    char fileName = "a"; 
    FILE *out;

    char fileToOpen[strlen(fileName) + 5]; 
    // strlen(fileName)+5 because it's the length of the file + length of ".txt" + char null

    strcpy(fileToOpen, fileName); 
    // Copying the file name to the variable that will open the file

    strcat(fileToOpen, ".txt"); 
    // appending the extension of the file

    out = fopen( fileToOpen, "w" ); 
    // opening the file with a variable name

    if(out == NULL)
    {
        perror("Error: ");
        exit(EXIT_FAILURE);
    }
    fclose(out);

    return EXIT_SUCCESS;
}

答案 8 :(得分:-2)

不,fopen()返回FILE*

FILE *fopen(const char *path, const char *mode);

<强> +

char a [] =“a”;

答案 9 :(得分:-2)

strcpy(a, ".txt");
fopen(a, "w");

可能会按照您的要求做。