如何为C中的每个文件创建一个唯一的名称?

时间:2015-12-02 16:38:36

标签: c file

你今天过得怎么样?我有一个关于文件名处理的问题:D。我的代码不想工作,它给了我错误的细分

我们的想法是创建唯一的文件名并创建 如果 ,则已存在同名文件。第一个是没有文件的异常,因此for循环从1而不是0开始。

unistd.h是必需的!

char fileName[15][100];
sprintf(fileName[0],"output.txt");
FILE *output;

   for(int i = 1 ;i < 100; i++){
        sprintf(fileName[i],"Output%d.txt",i+1);

        //File exists
        if(!access(fileName[i],F_OK))
        {
            //Create and open a file
            output = fopen(fileName[i], "w");
            break;
        }    
    }

我只需要创建一个try函数(比如while),直到找到未采用的名称。我只是将for循环放在那里,限制为100。

3 个答案:

答案 0 :(得分:1)

你必须为字符串使用malloc内存。

例如

public void stopRecording(View view) {
    start.setVisibility(View.VISIBLE);
    stop.setVisibility(View.GONE);
    status = false;
    Log.d(LOG,"I am about to release the record.");
    record.release();
    Log.d(LOG, "I have released.");
}

Number_If_Strings:你需要多少个字符串? String_Length:每个字符串的长度

答案 1 :(得分:1)

你在这里有什么:

char* fileName[100];

...是一个包含100个char指针的数组。但是,您没有为实际的字符串本身腾出空间。

执行此操作时:

sprintf(&fileName[0],"output.txt");

...你将“output.txt”写入fileName [0]中地址所指向的位置,很可能是0x0或一些随机值,具体取决于你的编译器以及你是否在堆栈或堆上分配数组等。这通常会导致分段违规,并且您的程序会终止。

答案 2 :(得分:0)

您没有为指向数组指定任何内存指向。你的语法也有点偏离。这个简单的例子展示了如何为字符串数组分配内存,分配一些值,打印它们并释放内存。

SELECT 
    name, capital
FROM
    world
WHERE
    capital LIKE concat('%', name, '%') OR capital LIKE concat('%', name, '%')

节目输出:

db.comments.aggregate(
[
  {$match: {blog_id: ObjectId("56587befdb7224110f007233")}}, //match blogid
  {"$unwind": "$comments"}, //unwind the comments array
  {$sort: {"comments.dt": 1}}, //sort the comment documents by date
  {
    "$group": {
        "_id": '$blog_id', //group comment documents by blog_id
        "comments": {
            "$push": "$comments" //push comments of same blog_id into an array
        }
    }
}])