首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lcc tmpnam崩溃

lcc tmpnam崩溃
EN

Stack Overflow用户
提问于 2013-04-07 17:05:44
回答 1查看 47关注 0票数 0

当我使用lcc编译器并调用tmpnam(buf)时,程序就崩溃了。

代码语言:javascript
复制
Reason: L_tmpnam indicates that buf must be 14 bytes long, while the string returned 
is "D:\Documents and settings\Paul\Temporary\TmP9.tmp" which is much longer than 14.  

我做错了什么,如何解释这种行为。

EN

回答 1

Stack Overflow用户

发布于 2013-04-07 17:33:01

来自man tmpnam的逐字记录

从不使用此函数。改用mkstemp(3)或tmpfile(3)。

不管怎样,正如你所要求的:

tmpnam()生成的名称由文件名maximum L_tmpnam lenght 加上名称P_tmpdir的目录组成。

因此,传递给tmpnam()的缓冲区最好声明(如果为C99):

代码语言:javascript
复制
char pathname[strlen(P_tmpdir) + 1 + L_tmpnam + 1] = ""; /* +1 for dir delimiting `/` and +1 for zero-termination */

如果不是C99,你可以这样做:

代码语言:javascript
复制
size_t sizeTmpName = strlen(P_tmpdir) + 1 + L_tmpnam + 1;
char * pathname = calloc(sizeTmpName, sizeof (*pathname));
if (NULL == pathname)
  perror("calloc() for 'pathname'");

然后像这样调用tmpnam()

代码语言:javascript
复制
if (NULL == tmpnam(pathname))
  fprintf(stderr, "tmpnam(): a unique name cannot be generated.\n");
else
  printf("unique name: %s\n", pathname);

... /* do soemthing */

/* if on non C99 and calloc(() was called: */
free(pathname);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15860684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档