1

我目前正在尝试使用文件中的 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 ,这是同样的问题。

4

1 回答 1

3

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

问题是,这些不是用于在终端上打印的字符。 nbMult例如,假设您输入 1234 for nbMult。您输入的实际上是字符'1', '2', '3', '4'- 其数值分别为 49、50、51、52(这里有一个程序说明了这一点)。但是,在典型机器上,您将在内存中获取的字节数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

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

于 2018-02-15T21:05:15.913 回答