c语言fwrite函数及地址的问题

wdata=0xa5;
fwrite(&wdata,sizeof(char),1,filedir);

请问这两句话什么意思?谢谢
补充一点:char wdata;

你好,是这样的

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
这是函数原型定义 即参数含义

wdata=0xa5; 不知道你定义的这个是不是赋值地址语句
wdata = "0xa5" 这样是0xa5是字符串赋值给了wdata
wata = 0xa5 这样写的话,0xa5就是一个十六进制的地址的形式
fwrite(&wdata,sizeof(char),1,filedir); //这句话的意思就是 把wdata这个地址中的内容,放入到filedir中,大小是sizeof(char) 个数是1 这句话的意思就是向文件中写数据的

不赞同,Parthas这个人的回答,他的“所以这个是将0xa5这个字符写入filedir指向的文件中。”
这句话是有错的,不是将0xa5写入指定的文件,如果你是要写入0xa5字符串的话,应该定义wdata = "0xa5"而不是wdata = 0xa5

希望可以帮到你,望采纳追问

谢谢你 其实我就是对&wdata比较困惑 原语句就是wdata = 0xa5
您能在详细解释一下为什么是将0xa5这个地址中的内容放入filedir吗?
首先,这个位置要放一个地址或指针,这个我明白。可是&wdata不就是取wdata的地址吗?那不就是将wdata的内容放入filedir吗?

追答

是这样的,那个位置就是放的要写入东西的地址,你把那个位置写了0xa5的地址了,当然是将0xa5这个地址中的内容放入filedir中了,0xa5本身就是个地址,对地址取地址是没有错的,反而是更安全的,系统会找wdata中存放的内容发现是个地址,会继续找这个地址中的内容。所以&data这样写是没错的

不知道你的0xa5是怎么回事,但是举个例子
char ch= 0x35; -- 可以,0x35 是16进制 35,因为 char 可以看成 8 bits (1 byte) 整数。
如果你的wdata也是char类型的那就是这个意思,如果你程序中有0xa5这个地址的话,那0xa5就是个地址
在分别说明一下
char ch='0xa5'; -- '0xa5'表示字符数值,对一个char大小的变量ch容纳不了这么大的数,所以只用了 '5',也就是 ASCII 值 53,十六进制 35,字符5。
char ch="0xa5"; -- 字符串,要 ch[5] 才装得下,4个字符 0xa5 何一个结束符 "\0"

你既然补充了
char ch= 0x35; -- 可以,0x35 是16进制 35,因为 char 可以看成 8 bits (1 byte) 整数。

这个就成立了!

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-28
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
fwrite(&wdata,sizeof(char),1,filedir);

所以这个是将0xa5这个字符写入filedir指向的文件中。
&wdata这个是取wdata的地址。
sizeof(char)这个表示取的单位长度为一个char的长度,也就是1。
1说明只取一个单位长度,也就是说从&wdata地址开始取一个字符也就是0xa5。
filedir这个是FILE指针,指向一个已经打开了的文件。
第2个回答  2012-12-28
wdata=0xa5;
fwrite(&wdata,sizeof(char),1,filedir);
就是把字符'\a5',也就是ASCII表中的序号为0xa5的字符写到文件里,看filedir的名字好像是在写目录。那应该是文件的属性Attrib吧
第3个回答  2012-12-28
liuhb1207回答的完全是错的,0xa5是一个字节长度,正好是一个字符。
0x代表16进制,A5就是那个字符的值。计算机中,基本字符都是遵照ASCII代码表的。
例如大写的A这个字符,它的值就是0x41

c语言fwrite函数及地址的问题
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;(2)size:要写入内容的单字节数;(3)count:要进行写入size字节的数据项的个数;(4)stream:目标文件指针;(5)返回实际写入的数据项个数count。这是函数原型定义 即参数含义 wdata=0xa5; 不知道你定义的这个是不是赋值地址...

c语言中fwrite的问题
fwrite 操作后会把文件指针位置 向后 移动size*count字节。接着再fwrite就从这个当前位置起写。while循环里,例如读1个结构,写一个结构,一直到读到 文件结束符 EOF为止。这种写法有没有必要看情况决定。例如,一个结构就是一个学生的成绩单,但一开始并不知道文件里一共有多少学生,那么用这种循环读...

C语言关于fwrite函数的问题
你的程序怎么不加注释啊。。。我大概读了下,觉得可能是你的读函数把你的文件都读出来后,最后把你链表记录到最后指向空的头指针也读了。你看看是不是你把数据信息都输进去后,它读出所有信息后又多读了一位空指针所指的随机数据。

c语言第一次弄fwrite,但是运行后我打开文件看里面是空的。为什么
这么写正常的话是应该输入 100 次的.之所以一次就退出是因为 fwrite (&s, sizeof(s), 100, pFile ); &s 应该是 s[i]. s本身已经是指针了.错误导致 再按任意键结束了。 没有 fclose 所以文件里什么都没有.

C语言中fwrite和fread函数的问题
“第一次循环的时候 将c1地址中的内容写入到 pfw地址,再第二次写入的时候,pfw的地址是+1吗?”——当然。这些都是文件指针自动管理的不须程序员干预。不过所谓+1是广义的,即文件指针向后移动多少,是由写入函数的实参和是否写入成功决定的。

C语言中的fwrite(或是fopen)的问题,追加写入就错误。
楼主这句有问题for(i=0;str[i]!='\/0';i++); ,应该为for(i=0;str[i]!='\\0';i++); 其他没问题啊。include <stdlib.h> include <stdio.h> int main(){ FILE *fp;int i;char path[160],str[500];int size =0;printf("输入文件地址或者创建一个新文件:\\n");gets(path);f...

C语言fwrite()问题。
应该是这种情况:你输入“hell0 world”时因为有间隔,导致你从流中写入到你的a变量中其实只有hello这几个字符,因为它是以空格结束,最后读出来的其实就是你写进去的hello加上a中剩余元素的值,如果你的a中的元素先都初始化为0,那么就不会出现乱码了。要获取一行需要getline吧 ...

C语言 fwrite fread 函数怎么使用? 始读取不到数据 也可能我根本没写...
C语言里的fwrite,是带写缓冲的。你往文件里写数据后,数据并不是马上就写到文件里。主要在下面三种情况下会写到文件里:(1)缓冲区满了 (2)使用了fflush函数 (3)使用了fclose函数 所以你的错误就在于,在saveToDisk函数的最后,没有把文件关闭。另外,对文件操作结束,把文件关闭掉本身就是个好...

C语言fwrite写入文件后为什么出现乱码?
这个函数以二进制形式对文件进行操作。按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。写入数据用fprintf(fp,"%s %s %d 这种方式。不是 fscanf(), 另,注意写出时的格式里要有分隔...

C语言 fwrite输入问题
C语言 fwrite输入问题 #include<stdio.h>#include<stdlib.h>#defineN2structstudent_type{charname[10];intnum;intage;charaddr[15];}stud[N];voidsave(){FILE*fp;inti;if((fp=fopen("C:\/\/stu.dat","wb"))=... #include<stdio.h>#include<stdlib.h>#define N 2struct student_type { char name[...

相似回答