2015-09-08 50 views

回答

5

mkstemp manual page

最后六个模板的字符必须是“XXXXXX”这些都是用字符串,使文件名唯一替代。由于它将被修改,因此模板不能是字符串常量,而应该声明为字符数组。

所以你声明一个数组并将其传递给函数,该函数将修改它,然后在数组中有文件名。

+0

没错。我没有想到这一点。不管怎么说,如果我传递一个const呢? – alexandernst

+1

@alexandernst如果您将指针传递给常量或只读数组(如字符串文字),您将会遇到未定义的行为。 –

+0

最后一个问题。有没有一种(简单)的方法来为不同的操作系统生成模板? 'tmpnam'似乎在那里做得很好。 – alexandernst

3

输入字符串被修改为文件名。因此,它不能是字符串文字。

POSIX说的mkstemp()

#include <stdlib.h> 

int mkstemp(char *template); 

mkstemp()功能将取代字符串的内容指向template由唯一的路径名,并返回文件打开文件描述符进行读取和写入。 ... template中的字符串应该看起来像一个带有六个尾随“X”的路径名; mkstemp()用可移植文件名字符集中的字符替换每个'X'。 ...

相同的页面还描述了可用于创建临时目录的mkdtemp()

相关问题