LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 760|回复: 2

void* alloca()中不懂的。

[复制链接]
发表于 2004-2-22 21:09:03 | 显示全部楼层 |阅读模式
请看这个例子:

  1. FILE *open_err_file( char *name )
  2. {
  3.     char *buffer;
  4.     /* allocate temporary buffer for file name */
  5.     buffer = (char *)alloca( strlen( name ) + 5 );
  6.     if( buffer ) {
  7.         FILE *fp;
  8.         sprintf( buffer, "%s.err", name );
  9.         fp = fopen( buffer, "w" );
  10.         return fp;
  11.     }
  12.     return (FILE *)NULL;
  13. }
  14. int main( void )
  15. {
  16.     FILE *fp;
  17.     if((fp = open_err_file( "err_name" ))<0) {
  18.           printf( "Unable to open error file\n" );
  19.           return(1);
  20.     } else {
  21.         fprintf( fp, "Hello from the alloca test.\n" );
  22.         fclose( fp );
  23.     }
  24.     return EXIT_SUCCESS;
  25. }

复制代码

这里的alloca()前怎么要用(char *)n呢?是因为buffer的类型是char *吗?那这个函数的原型定义中的void *中的void的意思就是可以是任何数据类型啦??:help :help
可以很莱,但我想清楚的知道,先谢过。。
发表于 2004-2-22 22:21:02 | 显示全部楼层
就是类型转换
把返回的void*转换成char*类型

这样可以减少一个警告
发表于 2004-2-24 11:16:21 | 显示全部楼层
alloc系列函数返回的都是void*, 直接赋值给非void*的指针会在编译时得到警告
强制转换后就好了
这是一个好习惯,hoh
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表