fork(23) download
  1. /*(問題文)ファイルgifts.datからデータを読み込み、構造体のポインタ拝謁にデータを格納する。この際、利用する分だけ動的にメモリを確保する。読み込んだ結果は、gifts.datとは別のファイルに出力せよ。(ファイル名は自由)また、入力ファイル名を標準入力から指定できるようにせよ。
  2.  
  3. gifts.dat
  4.  
  5. JZK-30 jizake_tsumeawase 4500
  6. BSP-15 Body_soap_set 3000
  7. BT-200 Bath_towel_set 2500
  8. TEA-20 koutya_tsumeawase 5000
  9.  
  10. 実行例:
  11. データ数を入力してください:4
  12. ファイル名を入力してください:gifts.dat
  13. 表示形式変換後ファイルに出力しました
  14.  
  15. 以下自分で書いたソースコード、ファイル指定してファイルを開こうとしたところがセグメンテーション違反になっていてどうすればいいか分かりません。できれば書いたコードの追加、最小限の修正で教えていただきたいです。*/
  16. #include<stdio.h>
  17. #include<stdlib.h>
  18. #include<string.h>
  19. #define max 50
  20. typedef struct GIFT{
  21. char code[max];
  22. char name[max];
  23. int price;
  24.  
  25. }f;
  26.  
  27. int main()
  28. {
  29. FILE *fp;
  30. FILE *afp;
  31. f *gift[10];
  32. char a[max],b[max],c[max];
  33. int d,e,i,j;
  34.  
  35. printf("データ数を入力してください:");
  36. scanf("%d\n",d);
  37. printf("ファイル名を指定してください:");
  38. scanf("%s\n", a);
  39.  
  40.  
  41. fp = fopen(a,"r");
  42. afp = fopen("presents","w");
  43. if(fp == NULL){
  44. printf("ファイルが開けませんでした.\n");
  45. return 1;
  46. }
  47. if(afp == NULL){
  48. printf("ファイルが開けませんでした.\n");
  49. return 1;
  50. }
  51.  
  52.  
  53. for(i = 0; i < d; i++)
  54. {
  55. fscanf(fp,"%s %s %d",b ,c ,&e) != EOF;
  56.  
  57. gift[i] = (f*)malloc(sizeof(f)*(d+1));
  58.  
  59. strcpy(gift[i]->code,b);
  60. strcpy(gift[i]->name,c);
  61. gift[i]->price = e;
  62.  
  63. fprintf(afp,"code: %s\n name: %s\n price: %d\n",gift[i]->code, gift[i]->name, gift[i]->price);
  64.  
  65.  
  66.  
  67. }
  68.  
  69. printf("表示形式変換後ファイルに出力しました.\n");
  70.  
  71. for(j = 0; j < d; j++)
  72. {
  73. free(gift[j]);
  74.  
  75. }
  76.  
  77. fclose(fp);
  78. fclose(afp);
  79.  
  80.  
  81. return 0;
  82. }
  83.  
Runtime error #stdin #stdout 0.02s 1812KB
stdin
Standard input is empty
stdout
データ数を入力してください:ファイル名を指定してください:ファイルが開けませんでした.