Array von Charaktern aus Unterprogramm an Hauptprogramm übergeben



  • Hi ich hab da ein kleines Problem:
    ich möchte gerne einen Array von Charaktern aus einem Unterprogramm in ein Hauptprogramm übergeben:

    Aufruf aus dem Hauptporgramm:

    ...
    nlin=5;
    MAXSTR=300;
    char name[nlin][MAXSTR];
    double wert[nlin];
    
    read_fp_string(INPFILE, nlin, &wert[0], &name[0][MAXSTR]);
    for (j=0; j<nlin; j++)
    {
    fprintf(LOGFILE,"Wort %s gehört zu Wert %f\n", name[j], wert[j]);
    }
    

    Unterprogramm

    int read_fp_string(FILE *WORKFILE, int nlin, double *snum, char *string)
    {
      int j;
    
      for (j=0; j<nlin ; i++)
        {
        fscanf(WORKFILE,"%lf %s", (snum+j), (string+j));
        }
    ...
    }
    

    das was ich einlesen will sieht ungefähr so aus:

    30.89 wort3
    325.4 wort2

    den double-Wert bekomme ich richtig übergeben jedoch nie das Wort, habe schon mehrere Sachen ausprobiert, doch ohne Erfolg!

    Bin für jede Hilfe äußerst Dankbar!

    Greetz XiriX



  • habe es folgendermassen zum laufen gebracht.

    #include <stdio.h>
    
    #define MAXSTR 20
    
    int read_fp_string( int xlin, double *snum, char **string)
    {
      *string     = "string 1";
      *(string+1) = "string 2";
      *snum = 1.1;
      *(snum+1) = 2.2;
    }
    
    int main () {
       char * name[2];
       double wert[2];
       name[0] = (char*)malloc(MAXSTR);
       name[1] = (char*)malloc(MAXSTR);
       name[0] = "";
       name[1] = "";
    
       read_fp_string(2,&wert[0], &name[0]);
    
       printf("%g, \"%s\"\n", wert[0], name[0]);
       printf("%g, \"%s\"\n", wert[1], name[1]);
       free(name[0]);
       free(name[1]);
    }
    

    überlasse die erklärung warum deine version nicht funktioniert anderen.
    K



  • ZuK schrieb:

    name[0] = (char*)malloc(MAXSTR);
       name[1] = (char*)malloc(MAXSTR);
       name[0] = "";
       name[1] = "";
    

    Schlechte Idee. Was du meinst, war vermutlich:

    #include <stdio.h>
    #include <string.h>
    
    #define MAXSTR 20
    
    int read_fp_string( int xlin, double *snum, char **string)
    {
      strcpy(string[0], "string 1");
      strcpy(string[1], "string 2");
      snum[0] = 1.1;
      snum[1] = 2.2;
    }
    
    int main () {
       char * name[2];
       double wert[2];
       name[0] = (char*)calloc(MAXSTR, sizeof(char));
       name[1] = (char*)calloc(MAXSTR, sizeof(char));
    
       read_fp_string(2,&wert[0], &name[0]);
    
       printf("%g, \"%s\"\n", wert[0], name[0]);
       printf("%g, \"%s\"\n", wert[1], name[1]);
       free(name[0]);
       free(name[1]);
    }
    


  • dürfte heute einen schlechten tag haben.
    0xdeadbeef hat natürlich recht.
    K.



  • Thx, hat prima geklappt!

    Greetz XiriX


Anmelden zum Antworten