【问题标题】:Write int variable in file using write使用 write 在文件中写入 int 变量
【发布时间】:2018-07-26 17:35:13
【问题描述】:

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

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 ,这是同样的问题。

【问题讨论】:

  • 你如何“访问”文件?
  • 你了解二进制文件和文本文件的区别吗?
  • 我尝试打开文件:怎么样?
  • 如果您希望文件包含可读文本而不是二进制文件,那么 sprintf() 或 fprintf() 之类的方法是可行的。向我们展示该代码,我们会告诉您哪里出错了。
  • 通过在控制台中输入 gedit 数据

标签: c file unix ascii c-standard-library


【解决方案1】:

文件确实被创建了 - 并且有 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

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

【讨论】:

  • 谢谢,我现在可以看到了 ^^ 感谢您的帮助
  • @AnasMK:如果您觉得这个答案有帮助,您可以通过按页边空白处的“v”号来接受它。
猜你喜欢
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多