我在弄清楚如何将无符号长变量(在这种情况下为电话号码)写入二进制文件时遇到了麻烦。

我有这个

int main()
{
   char useInput[100];
   unsigned long *phoneNum;
   FILE *fp = fopen("test.bin", "wb");


   while (strncmp(useInput,"exit",4)){

   printf("Phone #: ");
   scanf("%lu",phoneNum);
   fwrite(&phoneNum, sizeof(phoneNum), 1, fp);

   printf("Fname: ");
   fgets(useInput,100,stdin);
   useInput[strlen(useInput)-1]='\0';
   fwrite(&useInput, strlen(useInput), 1,fp);

   }

   fclose(fp);
   return 0;

}


使用-ansi和-Wall标志可以正常编译所有内容。当我运行它时,它允许我输入电话号码,但是当我输入完电话号码后按回车键时,它会显示细分错误。

我不确定从这里去哪里。

最佳答案

您的代码有多个问题。我评论了这些问题。

int main()
{
   char useInput[100];
   unsigned long *phoneNum;
   FILE *fp = fopen("test.bin", "wb");


   while (strncmp(useInput,"exit",4)){ // useInput is not initialized for the first iteration

   printf("Phone #: ");
   scanf("%lu",phoneNum); // phoneNum is not initialized
   fwrite(&phoneNum, sizeof(phoneNum), 1, fp);

   printf("Fname: ");
   fgets(useInput,100,stdin);
   useInput[strlen(useInput)-1]='\0';
   fwrite(&useInput, strlen(useInput), 1,fp);

   } // this closing curly bracket is missing

   fclose(fp);
   return 0;

}


A live test of your code,您可以修复这些问题并再次进行测试。

关于c - 将无符号长数据类型写入二进制文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55083357/

10-12 01:52