写函数语言C

写函数语言C,c,file,C,File,您好,我正在尝试使用write函数写入文件。但是我得到了“^^”而不是我的变量: 在我的代码下面 #include<stdio.h> #include <fcntl.h> main (int argc,char * argv[]) { FILE *PF=NULL; char File_name_1[100]; int fd=0; char str[30] = "This is test"; int var=30;

您好,我正在尝试使用write函数写入文件。但是我得到了“^^”而不是我的变量: 在我的代码下面

#include<stdio.h>
#include <fcntl.h>

main (int argc,char * argv[])
{
    FILE *PF=NULL;
    char File_name_1[100];
    int fd=0;
    char str[30] = "This is test";
    int var=30;         

    printf("Saisir le nom du fichier2 ");
    scanf("%s",File_name_1);

    if ( (fd = open(File_name_1,O_WRONLY|O_TRUNC|O_CREAT,0777)) < 0 )
    {
            printf("Impossible d'ouvrir fichier \n");
    }
    else
    {       printf("Traitement2 à commencer2 var :%d:",var);
            write(fd,&var,sizeof(var));
    }

    close(fd);
return 0;
}
#包括
#包括
main(int argc,char*argv[])
{
FILE*PF=NULL;
字符文件_name_1[100];
int-fd=0;
char str[30]=“这是测试”;
int-var=30;
printf(“法希尔的名字”);
scanf(“%s”,文件名1);
如果((fd=open(文件名1,O_WRONLY | O_TRUNC | O_CREAT,0777))<0)
{
printf(“不可能的d'ouvrir fichier\n”);
}
其他的
{printf(“Traitement2ácommitter2变量:%d:,var”);
写入(fd和var,sizeof(var));
}
关闭(fd);
返回0;
}
问题在于:

write(fd,&var,sizeof(var));
您正试图在文件中写入int。如果要编写可读的代码,write的第二个参数应为char*类型。尝试使用itoa函数来转换var值,它会将其转换为该数字的字符串表示形式。如果您的系统上没有itoa,您也可以使用sprintf:

    #include <stdio.h>
    #include <fcntl.h>
    #include <strings.h> //for strlen

    int main (int argc,char * argv[])
    {
    char buff[256]; //the buffer used by sprintf
    char File_name_1[100];
    int fd=0;
    char str[30] = "This is test";
    int var=30;         

    printf("Saisir le nom du fichier2 ");
    scanf("%s",File_name_1);

    if ( (fd = open(File_name_1,O_WRONLY|O_TRUNC|O_CREAT,0777)) < 0 )
    {
            printf("Impossible d'ouvrir fichier \n");
    }
    else
    {       printf("Traitement2 à commencer2 var :%d:",var);
            sprintf(buff, "%d", var); //convert your int into a string
            write(fd,buff,strlen(buff)); //wrtie the string in the fd
    }

    close(fd);
return 0;
}
#包括
#包括
#包括//用于strlen
int main(int argc,char*argv[])
{
char buff[256];//sprintf使用的缓冲区
字符文件_name_1[100];
int-fd=0;
char str[30]=“这是测试”;
int-var=30;
printf(“法希尔的名字”);
scanf(“%s”,文件名1);
如果((fd=open(文件名1,O_WRONLY | O_TRUNC | O_CREAT,0777))<0)
{
printf(“不可能的d'ouvrir fichier\n”);
}
其他的
{printf(“Traitement2ácommitter2变量:%d:,var”);
sprintf(buff,“%d”,var);//将int转换为字符串
写入(fd,buff,strlen(buff));//在fd中写入字符串
}
关闭(fd);
返回0;
}

尝试使用hex编辑器或
od-Ax-t x1 filename
命令检查文件的内容。顺便问一下,您有什么问题吗?您好,我在使用命令od-Ax-t x1 y后检索此结果:0000000 00 1e 0000004。我应该在我的文件中检索30。0x1e=16+14=30,因此它似乎是正确的,并且您的机器似乎使用big-endian。请尝试
od-Ax-t d4 y.l
od-Ax-t d1 y.l
。您好,我试图添加itoa函数以将整数转换为字符串,但编译后收到此错误:ld:0711-317错误:未定义符号:。itoa ld:0711-345使用-bloadmap或-bnoquiet选项获取更多信息。我编辑了答案。我忘记了itoa在Linux系统上并不总是可用的。下面是一个sprintf示例。