Das Buch für Anfänger zur C Programmierung unter Linux und MS Windows, Einstieg in C Jürgen Wolf C C++ C/C++ Programmieren Linux ANSI C Standard C C99 Einstieg in C Buch Bücher Einstieg in C - C Kurs Programmieren C/C++ Tutorial Lösungen zu den Aufgaben von Kapitel 19
  1. Ein möglicher Lösungsweg:

    #include <stdio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    char *fgetstr(char *name)
    {
      char *str, *temp;
      size_t len;
      /* Datei name öffnen */
      FILE* file = fopen(name,"r+");
      if(file == NULL)
         {
            printf("Fehler bei fopen()...\n");
            exit(0);
         }
      /* Länge der Datei in Bytes ermitteln */
      fseek(file, 0L, SEEK_END);
      len = ftell(file);
      fseek(file, 0L, SEEK_SET);
      /* Speicher für den String reservieren */
      str = (char*)malloc(sizeof(char)*len);
      if(str == NULL)
         {
            fprintf(stderr, "...Speicherplatzmangel...\n");
            exit(0);
         }
      temp = str;
      /* Jetzt Zeichenweise einlesen bis EOF */
      while((*temp=fgetc(file))!=EOF)
              temp++;
      *temp = '\0';
      fclose(file);
      return str;
    }
    
    int main(void)
    {
      char *string = fgetstr("test.txt");
      printf("%s\n", string);
      return 0;
    }
  2. Ein weiterer Lösungsvorschlag:

    #include <stdio.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    char *fgetstr(char *name)
    {
      char *str, *temp;
      size_t len;
      /* Datei name öffnen */
      FILE* file = fopen(name,"r+");
      if(file == NULL)
         {
            printf("Fehler bei fopen()...\n");
            exit(0);
         }
      /* Länge der Datei in Bytes ermitteln */
      fseek(file, 0L, SEEK_END);
      len = ftell(file);
      fseek(file, 0L, SEEK_SET);
      /* Speicher für den String reservieren */
      str = (char*)malloc(sizeof(char)*len);
      if(str == NULL)
         {
            fprintf(stderr, "...Speicherplatzmangel...\n");
            exit(0);
         }
      temp = str;
      /* Jetzt Zeichenweise einlesen bis EOF */
      while((*temp=fgetc(file))!=EOF)
              temp++;
      *temp = '\0';
      fclose(file);
      return str;
    }
    
    void fputstr(char* str, char *name)
    {
      char ch;
      int i=0;
      /* Eine Datei zum schreiben öffnen */
      FILE* file = fopen(name,"w");
      if(file == NULL)
         {
            printf("Fehler bei fopen()...\n");
            exit(0);
         }
      /* Jetzt Zeichenweise den String in die Datei schreiben */
      while((ch = *str) != '\0')
         {
                fputc(ch,file);
                str++;
         }
      fclose(file);
    }
    
    int main(void)
    {
      char *string;
      /* Wir schreiben einen String in eine Datei */
      fputstr("Ein Teststring für die Datei", "test.txt");
      /* Wir lesen den String wieder aus der Datei aus */
      string = fgetstr("test.txt");
      printf("%s\n", string);
      return 0;
    }