读书人

fgets 的第一个参数只能是数组吗,能不

发布时间: 2012-02-10 21:27:42 作者: rapoo

fgets 的第一个参数只能是数组吗,能不能是指针!!
如题!
能否给个例子!

[解决办法]
char *fgets( char *string, int n, FILE *stream );

函数原型如上。

char 类型指针。
当然给个数组名也是可以的。因为数组名是数组的首地址,可以看做指针
[解决办法]
指针当然可以,不过指针要指向一块可用的内存区.

例子1:

char rgchar[100];
char *psz = rgchar;

fgets(psz,....);

例子2:

char *psz;

psz = (char *)malloc(100 * sizeof(char));
....
fgets(psz,....);

这是因为fgets会对指针指向的内存进行填充(写操作),所以指针必须指向可用的、合理的内存区。
实际上传递数组,也只不过是把数组首地址(一个指针常量)传递给fgets而已,并且数组肯定有合理空间的分配了。
[解决办法]
当然可以。

数组传递给 fgets 后,
在函数内部其实就退化成了一个普通的指针了。

所以,
只要分配了足够的空间,
传递指针也没有任何问题:
char *ptr=(char *)malloc(100 * sizeof(char));
fgets(ptr, 80, fp); //从fp指定的文件中读取 80 个字符到 ptr指向的空间中
puts(ptr); //输出查看内容
[解决办法]
本质是个指针,指向一块可用的缓存即可,数组名可以看作一个常量指针
[解决办法]
可以是指针呀
在c语言中传入的数组将会蜕化前退去一维的指针形式

读书人网 >C语言

热点推荐