0

こんにちは、tkt入力ファイルを読み取って構造で使用しようとしましたが、正常に動作しますが、値の画像、アドレス、または名前を読み取ろうとすると、空です。

これはコードです:

int nombre_radio(char* fichier_radio)
{
   FILE* fichier = NULL;
   char buf[TAILLE_MAX_RADIO]="";
   int i;

   fichier = fopen(fichier_radio, "r");

   if (fichier != NULL)
   {
       i=0;
       while (fgets(buf, TAILLE_MAX_RADIO, fichier) != NULL)
       {
           i++;  
       }
   }

   fclose(fichier);
   return(i);
}
/* fonction pour récuperer l'image*/
void get_radio(int numero, char* fichier_radio, char* nom, char* adresse, char* image)
{
   FILE* fichier = NULL;
   char chaine[TAILLE_MAX_RADIO];
   int i;
   char im_temp[102400];

   fichier = fopen(fichier_radio, "r");

   if (fichier != NULL)
   {
       i=0;
       while (fgets(chaine, TAILLE_MAX_RADIO, fichier) != NULL && i<numero){i++;}

       strcpy(nom, strtok(chaine, "\t"));
       strcpy(adresse, strtok(NULL, "\t"));
       strcpy(im_temp, strtok(NULL, "\t"));
       if (strstr(im_temp, "\n") != NULL)
           strncpy(image, im_temp, strlen(im_temp)-1);
       else
           strncpy(image, im_temp, strlen(im_temp));
   }

   fclose(fichier);
   return;
}

これは、txtファイルを読み取り、それを使用して画像アドレスと名前を抽出する2つの関数であり、ここで関数を使用します:

int i;
char fichier_radio[1024];
strcpy(fichier_radio,"liste_radio.txt");
int nombre_Radio = nombre_radio(fichier_radio);

recording_asset *assets = malloc(sizeof(recording_asset) * 5000);

printf("nombre %d",nombre_Radio);
char *adresse = malloc (sizeof (*adresse) * 256);
char *nom = malloc (sizeof (*nom) * 256);
char *image = malloc (sizeof (*image) * 256);



    for(i=0; i<nombre_Radio; i++){      
        get_radio(i, fichier_radio, nom, adresse, image);
       printf("image : ",image[i]);
    }
4

1 に答える 1

1
  1. 確認していただけますかfclose(fichier);: がポインタの

    場合、呼び出されるべきではありません。未定義の動作が発生するため、観察しているクラッシュが説明される場合があります。 チェック条件の中に入れる必要があります。fichiernullfclose

    fclose(fichier);if (fichier != NULL)

  2. では、適切な値にnombre_radio初期化iしてください。 の場合fichierはガベージ値を返しますNULL

于 2013-11-01T08:15:08.557 に答える