0

別のファイルから文字列を読み取って配列に格納する際に問題があります。プログラム全体で使用できるように、その配列を指すポインターが必要です。すべての変数はグローバルです。これで動作するように fgets 行を修正してください。ありがとう!

#include <stdio.h>
#include <stdlib.h>

void load_data();

int value;

char name[25];
char * nameP = NULL;

char another_name[25];
char * another_nameP = NULL;

int main()
{
   load_data();

   printf("value = %i\n", value);
   printf("name = %s\n", name);
   printf("another name = %s\n", another_name);

   return 0;
}
void load_data()
{
   FILE * fileP;

   if (!(fileP = fopen ("save_file.dat", "rt")))
   {
      printf("\nSave file \"save_file.dat\" not found.\n");
      printf("Make sure the file is located in the same folder as the executable file.\n\n");
      exit(1);
   }
   rewind(fileP);
   fscanf (fileP, "%i", &value);
   fgets (name, 25, fileP); // what is wrong with this line?
   fgets (another_name, 25, fileP); // what is wrong with this line?

   nameP = name;
   another_nameP = another_name;
} 

save_file.dat の内容:

30
This is my name
This is another name
4

1 に答える 1

1

キャラクターfscanfが含まれていないからでしょうか?\n試す:

fscanf(fileP, "%i\n", &value);

改行文字を読み取らないため、 (次の行で)またはfgetsが見つかるまで読み続けます。この場合、すぐに文字を見つけるので、読み取りを停止します。したがって、ファイルの 3 行目は読み取られません。EOF\n\n


の末尾にある新しい行を削除するにはfgets、関数を追加するだけです。

void remove_newline(char *str) {
    size_t len = strlen(str);
    if (str[len-1] == '\n') {
        str[len-1] = '\0';
    }
}

を忘れないでください#include <string.h>。次に、データを出力する前に、次のように呼び出します。

remove_newline(name);
/* ... */
printf("name = %s\n", name);
于 2013-06-22T04:28:32.250 に答える