c - 使用 write 在文件中写入 int 变量

标签 c file unix ascii c-standard-library

我目前正在尝试使用文件中的写入函数写入整数变量。这是我的代码:

int main(int argc, char** argv){
int fd, nbMult, i;
char buf[4];
if((fd = open("data", O_CREAT|O_RDWR, 0777))==-1){
    perror("ERROR\n");
    exit(EXIT_FAILURE); 
}

do{ 
    printf("Bla bla ");
    if( scanf("%d", &nbMult) !=1 ) while( (i = getchar()) != '\n' );
}while(nbMult<1);
sprintf(buf, "%d", nbMult);
if( write(fd, buf, sizeof(int)) == -1 ){
    perror("ERROR\n");
    exit(EXIT_FAILURE);
}

close(fd);
return 0; }

它创建了文件,但是当我尝试打开它时,它显示“无法显示”。当我用 data.txt 替换文件名时,它可以工作,但它在文件中显示奇怪的字符。我也尝试过使用 sprintf() 将 Integer 变量转换为 String,这是同样的问题。

最佳答案

文件确实已创建 - 并且有 sizeof(int) 字节。它的内容是组成内存中整数nbMult的字节。

问题是,那些不是用于在终端上打印 nbMult 的字符。例如,假设您为 nbMult 键入了 1234。您输入的实际上是字符 '1', '2', '3', '4' - 其数值分别为 49、50、51、52 ​​( here '这是一个说明这一点的程序)。但是在典型的机器上,nbMult 的内存中的字节数是 210、4、0、0,因为:

* 210 ==  1234       % 2^8
*   4 == (1234/2^ 8) % 2^8
*   0 == (1234/2^16) % 2^8
*   0 == (1234/2^24) % 2^8

那些是您在文件中看到的“奇怪字符”。

关于c - 使用 write 在文件中写入 int 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816099/

相关文章:

c - 如何在 Linux "even if the filepath is not existing on the file system"上获取规范化(规范化)文件路径? (在 C 程序中))

linux - 取消引用该变量并将其附加到其他字符串

c - 如何在 C 中的 for (;;) 循环中声明多个变量?

c - 打印从 API 返回的状态字符串

file - 如何通过批处理文件将命令作为命令行参数传递

C - fgets 并将所有行存储在数组中

unix - 如何分隔由空格分隔的文本文件中的名称列表

c - printf: 不能使用 %*c 打印少于 1 个字符

c - 如何从 PNG 文件中读取任意 block ?

c++ - C 与 C++ 文件处理