Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Öffnen einer Datei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.04.2007, 23:57 Uhr
~Kralle
Gast


Hi!

kann mir jemand sagen, warum sich die Datei nicht öffnen lässt? Nachdem ich den Pfad bzw. die Datei angeben, die geöffnet werden soll, bringt er den Fehlerbericht!

Ich weiß nicht warum!


C++:
#include <stdio.h>
#include <stdlib.h>

void WriteNumbers(FILE *fout, int *arr, int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        fprintf(fout,"%d\n",arr[i]);    
    }


}

int* ReadNumbers(FILE *fin, int *n)
{
    int *ptr,i;
    fscanf(fin,"%d",&(*n));
    
    ptr=(int*)malloc((*n)*sizeof(int));

    for(i=0;i<(*n);i++)
    {
        fscanf(fin,"%d",&(ptr[i]));

    }

    return ptr;


}


void sort ( int arr[], int n)
{

   int i, j, temp;

   for (i=n; i>0; i--)
      for (j=0; j<i-1; j++)
         if (arr[j]>arr[j+1]) {
            temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
         }

   return;
}
void main (void)
{
    int n, *p;
    FILE *infp, *outfp;
    char filename1[40];
    char filename2[40];

    printf("Geben Sie den Pfad bzw. den Namen der auszulesenden Datei an: ");
    scanf("%s",filename1);
    fflush(stdin);
    
    printf("Geben Sie den Pfad bzw. den Namen der zu schreibenen Datei an: ");
    scanf("%s",filename2);
    fflush(stdin);
    
  
   if ((infp = fopen("filename1","r")) == NULL ) {
      printf("Datei mit dem Namen %s konnte nicht geoeffnet werden\n",filename1);
      exit(1);
   }
    
   if ((outfp = fopen("filename2","w")) == NULL ) {
      printf("Datei mit dem Namen %s konnte nicht geoeffnet werden\n",filename2);
      exit(1);
   }*/
              
   p = ReadNumbers(infp, &n);
   sort(p,n);
   WriteNumbers(outfp, p, n);
   fclose(infp);
   fclose(outfp);
   free(p);
}


Gruß Kralle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.04.2007, 00:15 Uhr
Blubber2063



Du darfst doch nicht den Variablenbezeichner filename1(2) in "" setzen, dann steht da ein String und nicht der Variablenbezeichner, du willst also die Datei filename1 öffnen.

Und noch ein wichtiger Hinweis, lass das scanf, bzw fscanf für Strings bitte sein, da ist keine Begrenzung des Puffers drinne, wird also mehr eingetippt dann hast du ein Problem, dann doch besser fgets, da kannst du die Puffergrenze angeben, das ist erheblich sicherer.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.04.2007, 01:36 Uhr
Lensflare




Zitat von Blubber2063:
Und noch ein wichtiger Hinweis, lass das scanf, bzw fscanf für Strings bitte sein, da ist keine Begrenzung des Puffers drinne, wird also mehr eingetippt dann hast du ein Problem, dann doch besser fgets, da kannst du die Puffergrenze angeben, das ist erheblich sicherer.

Kannst du das bitte etwas genauer erklären?
Was meinst du mit Begrenzung des Puffers?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.04.2007, 08:40 Uhr
ao

(Operator)



Zitat von Lensflare:
Kannst du das bitte etwas genauer erklären?
Was meinst du mit Begrenzung des Puffers?

Da googelst du mal nach "scanf" und "buffer overflow", dann findest du schon was.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.04.2007, 12:34 Uhr
~Kralle
Gast


Ja, ich würde auch gerne mit fgets arbeiten!

Aber fgets stellt ans Ende des Strings immer ein '\n'!

Und dazu müsste ich ne extra Funktion implementieren, um das '\n' zu entfernen! Bspw:


C++:
void entf(char *str)
{
    char *last;
    last=strrchr(str,'\n');
    *last='\0';
}



Und ich würde das gerne ohne diese Funtkion machen! Kannst du mir ne alternative bzw. andere Schreibweise für fgest ohne '\n' geben?

Gruß Kralle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.04.2007, 13:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


evtl einfach letzte eingelesene zeichen '\0'en (zumindest wenns ein '\n' war)?

also:


C++:
void entf(char *str)
{
   if(str[strlen(str)-1] == '\n')
     str[strlen(str)-1] = '\0';
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: