-1

我已经完成了有关stdio.h函数的阅读,需要一些小的说明。

请花一点时间对以下内容进行简短解释:

1) tmpnam() :它只给了我们一个包含唯一文件名的字符串,但是文件扩展名怎么办?我们strcat()每次都必须使用文件扩展名添加文件名吗?

2) rand() rand()在(Taken from )的上下文中,以下是什么意思cplusplusreference?:

“在 C 中,rand 使用的生成算法只能通过调用此函数来保证”

我检查了它,为同一个种子一个接一个地重复调用rand(),但它并没有给出递增的值!

3) getc() :下面对取自同一站点的参数( getc() ) 的描述中,粗体部分是什么意思?getc()

“ - -范围

指向标识输入流的 FILE 对象的指针。

因为某些库可能将此函数实现为宏,并且这可能会多次评估流表达式,所以这应该是一个没有副作用的表达式。”

4

1 回答 1

1
  1. 除非您自己提供了一个缓冲区并且知道它有多大,否则您无法修改返回的文件名。任何字符串复制或修改功能都可以使用。
  2. 这意味着由返回的数字序列rand()仅受对rand()函数本身的调用影响:无论您在调用之间做什么rand(),都会得到相同的输出。也就是说,底层函数只能通过调用rand(). 这并不意味着输出总是在增加。
  3. 这意味着它getc()可能是一个对其参数进行两次评估的宏。您为什么不尝试弄清楚此代码可能产生的结果:

    int i = 0;
    (void)getc((++i,stdin));
    printf("%d\n", i);
    

    下面是一个专门使用宏的实现示例getc()AIX 文档。如果我没记错的话,如果你没有将正确的指针传递给filenoand dirfd,你也会在 AIX 上遇到麻烦,而且可能还有其他的。看起来 OpenSolaris 也使用此定义执行此操作,尽管我手头没有副本(glibc,FreeBSD,不要使用宏)。

    #define getc(p)     (--(p)->_cnt>=0? ((int)*(p)->_ptr++):_filbuf(p))
    
于 2013-05-21T20:18:10.120 回答