当前位置: 技术问答>linux和unix
linux 下write()函数和大家探讨。。。
来源: 互联网 发布时间:2015-10-13
本文导语: 我写了一个小程序,将一个int x[2] = {1 ,2} 这样的数组用write()函数写到一个文件里, 但是写入之后察看文件是乱码,乱码是^A^类似样式出现,最后缀一个@结束,察看一些资料发现说如果没有文件结束符就会自动...
我写了一个小程序,将一个int x[2] = {1 ,2} 这样的数组用write()函数写到一个文件里, 但是写入之后察看文件是乱码,乱码是^A^类似样式出现,最后缀一个@结束,察看一些资料发现说如果没有文件结束符就会自动后缀一个@。如果把数组改成char 类型就不会出现这个问题,文件中会正常现实数组内容。
但是write()的第二个参数是const void * (GNU/Linux 编程指南中说明)也就是说可以是任意类型都可以,难道使用write() 函数时,所有非char型数组都要转换成char 数组类型才可在write中使用么?小弟不明请大家指教。
但是write()的第二个参数是const void * (GNU/Linux 编程指南中说明)也就是说可以是任意类型都可以,难道使用write() 函数时,所有非char型数组都要转换成char 数组类型才可在write中使用么?小弟不明请大家指教。
|
可以用类型强制转换试试看
|
write(fd,x,sizeof(x));
|
如何才能把int 类型的数组转化成char类型的数组呢????
|
千万不能强制转换数组,否则就是乱码,用一个循环将每个元素转换成char型(切记,整形数值的范围是0-127之间,否则转换后将改变本身大小)
如果强制将整型数组转换成字符数组,相当于将指向整型数组的指针转换成了指向字符数组的提针,比如一个有十个数的整形数组转换成字符数组,那么那个字符数组必须要有四十个元素,不然就会产生内存溢出,其转换后的字符数组的值与原来整形数组的值有很大的改变,主要受到计算机存储字节的顺序有关,只要你想想计算机的大端字节序的原则,就明白你转换后的值了
如果强制将整型数组转换成字符数组,相当于将指向整型数组的指针转换成了指向字符数组的提针,比如一个有十个数的整形数组转换成字符数组,那么那个字符数组必须要有四十个元素,不然就会产生内存溢出,其转换后的字符数组的值与原来整形数组的值有很大的改变,主要受到计算机存储字节的顺序有关,只要你想想计算机的大端字节序的原则,就明白你转换后的值了