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

时间:2018-02-15 20:55:26

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

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

1 个答案:

答案 0 :(得分:3)

文件确实已创建 - 并且具有ssh -L 3337:localhost:3306 a-user@A-server个字节。它的内容是构成内存中整数nbMult的字节。

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

nbMult

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