嘿所以我对C本身很新,并且在C中使用系统调用非常新,但是我必须将它用于作业,所以我试图练习读取和写入文件。读取工作正常,但由于某种原因,写入做了奇怪的事情。它写入文件的某种填充十六进制表示我要写入文件的数字。任何帮助将不胜感激!!
buffer= 10;
if (write(file, &buffer,sizeof(int)) < sizeof(int)) {
printf("Error in writing\n");
exit(EXIT_FAILURE);
}
当我运行它时,它将它放在文件中,但当我打印出数字本身时,它打印正确的数字
0a00 0000
答案 0 :(得分:2)
sizeof(int)
是4个字节(显然在你的环境中),它是32位的,可以用8个十六进制数字表示,这就是你在文件中看到的。
您显然位于Little Endian计算机上,因此首先写入最不重要的字节。在大端机器上,你会在文件中看到0000 000a。
答案 1 :(得分:0)
sizeof(int)
是32位,所以4个字节。这意味着4组两个十六进制值。那有意义吗?所以它应该填充它,因为你写的是4个字节。
答案 2 :(得分:0)
使用snprintf
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int file = creat("afile.txt",S_IRWXU);
int buffer= 10;
char sbuffer[10];
snprintf(sbuffer,sizeof(sbuffer),"%d",buffer);
if (write(file, &sbuffer,strlen(sbuffer)) < strlen(sbuffer)) {
printf("Error in writing\n");
exit(EXIT_FAILURE);
}
close(file);
}