size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

时间:2020-12-29 17:06:47
刚开始学MFC,最近看孙鑫老师的视频有一个函数不太理解,如上。孙鑫老师在视频中举得实例:
FILE *fFile;
fFile=fopen("1.txt","w" );//fopen("1.txt","r" );
fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),fFile);


*buffer对应的是"http://www.sunxin.org"一个具体的字符串,而*stream 对应的却是一个地址fFile,这是为什么啊?百思不得其解
有没有人能帮忙解答一下,十分感谢!

13 个解决方案

#1


话说你想问什么,把字符串里的内容从fFile文件指针出处写进去,有啥问题吗。。。

#2


FILE* 指针作为文件句柄,是文件访问的唯一标识,它由fopen函数创建,fopen打开文件成功,则返回一个有效的FILE*指针,否则返回空指针NULL
看看这里blog.sina.com.cn/s/blog_4d8205e40100gjf8.html

#3


MSDN

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

buffer

Pointer to data to be written

size

Item size in bytes

count

Maximum number of items to be written

stream

Pointer to FILE structure

#4


我主要想问MSDN中size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
 *buffer是一个指针,难道"1.txt"就是一个指针吗?

#5


"1.txt" 这个表达式,返回的是这个常量字符串的地址

#6


不好意思上面写错了。我主要有两个问题想问:
1.MSDN中FILE *fopen( const char *filename, const char *mode );
程序中使用fFile=fopen("1.txt","w" ),难道"1.txt"就是一个指针吗?
2.
MSDN中size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
 程序中使fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),fFile);
*buffer是一个指针,难道"http://www.sunxin.org"也是一个指针吗?""http://www.sunxin.org“不应该是这个指针对应的值吗?

#7


"1.MSDN中FILE *fopen( const char *filename, const char *mode );
程序中使用fFile=fopen("1.txt","w" ),难道"1.txt"就是一个指针吗?"


"1.txt"不是指针,是字符串常量,这个字符串放在内存中,那么就有一个内存地址对应这个字符串.而字符串指针变量filename的值是"1.txt"这个字符串在内存中第一个字符(也就是'1')的地址。filename里的值,仅仅是字符串第一个字符的内存地址。仅此而已

#8


那const void *buffer呢,从字面意思它应该是一个指针吧,那为什么会写"http://www.sunxin.org","http://www.sunxin.org"明明是一个字符串,不是指针,类型不匹配啊?

#9


1.是
2.是
楼上的费那么多话干吗?

#10


字符串作为右值或参数,实际上就是该字符串首个字符的地址,即字符串起始位置的指针。
而对于 C 语言而言,void * 可以和任意指针类型隐式互转。

不要因为 string 等 C++ 类的存在就想当然地把字符串当作一种类型!

#11


字符串作为右值或参数,实际上就是该字符串首个字符的地址,即字符串起始位置的指针。
而对于 C 语言而言,void * 可以和任意指针类型隐式互转。

不要因为 string 等 C++ 类的存在就想当然地把字符串当作一种类型!

#12


谢谢大家的回答,我再好好研究研究!

#13


在 C++ 里,字符串常量(string literal)的类型是常量字符数组。比如 "z" 的类型是 const char[2] (最后会补一个'\0')

数组在使用的时候,多数情况下会自动转换成一个指针,这个指针指向数组的首元素。所以字符串常量可以用在接受 const char* 的地方。

最后,指针类型可以隐身的转换为 void * / const void * 。字符串常量用在 fwrite 的第一个参数是,就经历了这两步转换 const char[] -> const char * -> const void *

#1


话说你想问什么,把字符串里的内容从fFile文件指针出处写进去,有啥问题吗。。。

#2


FILE* 指针作为文件句柄,是文件访问的唯一标识,它由fopen函数创建,fopen打开文件成功,则返回一个有效的FILE*指针,否则返回空指针NULL
看看这里blog.sina.com.cn/s/blog_4d8205e40100gjf8.html

#3


MSDN

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

buffer

Pointer to data to be written

size

Item size in bytes

count

Maximum number of items to be written

stream

Pointer to FILE structure

#4


我主要想问MSDN中size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
 *buffer是一个指针,难道"1.txt"就是一个指针吗?

#5


"1.txt" 这个表达式,返回的是这个常量字符串的地址

#6


不好意思上面写错了。我主要有两个问题想问:
1.MSDN中FILE *fopen( const char *filename, const char *mode );
程序中使用fFile=fopen("1.txt","w" ),难道"1.txt"就是一个指针吗?
2.
MSDN中size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
 程序中使fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),fFile);
*buffer是一个指针,难道"http://www.sunxin.org"也是一个指针吗?""http://www.sunxin.org“不应该是这个指针对应的值吗?

#7


"1.MSDN中FILE *fopen( const char *filename, const char *mode );
程序中使用fFile=fopen("1.txt","w" ),难道"1.txt"就是一个指针吗?"


"1.txt"不是指针,是字符串常量,这个字符串放在内存中,那么就有一个内存地址对应这个字符串.而字符串指针变量filename的值是"1.txt"这个字符串在内存中第一个字符(也就是'1')的地址。filename里的值,仅仅是字符串第一个字符的内存地址。仅此而已

#8


那const void *buffer呢,从字面意思它应该是一个指针吧,那为什么会写"http://www.sunxin.org","http://www.sunxin.org"明明是一个字符串,不是指针,类型不匹配啊?

#9


1.是
2.是
楼上的费那么多话干吗?

#10


字符串作为右值或参数,实际上就是该字符串首个字符的地址,即字符串起始位置的指针。
而对于 C 语言而言,void * 可以和任意指针类型隐式互转。

不要因为 string 等 C++ 类的存在就想当然地把字符串当作一种类型!

#11


字符串作为右值或参数,实际上就是该字符串首个字符的地址,即字符串起始位置的指针。
而对于 C 语言而言,void * 可以和任意指针类型隐式互转。

不要因为 string 等 C++ 类的存在就想当然地把字符串当作一种类型!

#12


谢谢大家的回答,我再好好研究研究!

#13


在 C++ 里,字符串常量(string literal)的类型是常量字符数组。比如 "z" 的类型是 const char[2] (最后会补一个'\0')

数组在使用的时候,多数情况下会自动转换成一个指针,这个指针指向数组的首元素。所以字符串常量可以用在接受 const char* 的地方。

最后,指针类型可以隐身的转换为 void * / const void * 。字符串常量用在 fwrite 的第一个参数是,就经历了这两步转换 const char[] -> const char * -> const void *