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 wort2den 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