Pointer..
-
Deine Ausgabe ist fehlerhaft:
for(int k = 0; i<nwords; k++){ for(int l = 0; i<MAXWORD; l++){ printf("%s\n", dict[k][l]); } }
Du gibst einzelne Zeichen als String aus (denn
dict
ist wohl alschar
-Array deklariert und nicht alschar*
-Array, denn sonst würde der Code darüber [strcmp, strcpy
] keinen Sinn machen).
Ändere es also zufor(int k = 0; i<nwords; k++){ printf("%s\n", dict[k]); }
-
Deine Ausgabe ist fehlerhaft:
Vielen Dank. Das ist nur ein Versuch gewesen die Datenbank auszulesen, ob die Werte richtig verwendet werden.
Ich habe vergessen das auszukommentieren. Vielen Dank für die Korrektur.
Dennoch löst es das Problem leider nicht.
-
@werdas_34
Hi ich gehe immer noch davon aus, dass dein strcpy dein Problem ist.
Ich denke an dieser Stelle wird dein Speicher korrumpiert.Warum ich danke, habe da so ein Gefühl!
-
-
Gern geschehen danke denke alles das gleiche
-
Hi ich gehe immer noch davon aus, dass dein strcpy dein Problem ist.
Ich denke an dieser Stelle wird dein Speicher korrumpiert.Ich wollte wissen ob der Fehler danach kommt, oder vor dem strcpy. Also printf vor und nach der Funktion reingesetzt.
Gemerkt er gibt beides aus. Dann wieder die offensichtlich unsinnigen Pointer beim Rückgabewert hinzugefügt und es funktioniert. Ich verstehe zwar nicht ganz was ich jetzt groß anders hatte am Anfang. Aber ok.Hier mal die funktionierende Funktion(Aufruf usw ist alles gleich geblieben):
int * insertw_1_svc(char **argp, struct svc_req *rqstp) { static int result; printf("%s\n", *argp); int i; for (i=0; i<nwords; i++) if (strcmp (*argp, dict[i]) == 0) return 0; printf("Test 1\n"); strcpy(dict[nwords], *argp); printf("Test 2\n"); printf("%s\n", dict[nwords]); nwords++; result = nwords; return &result; }
-
Da du den Aufrufkontext verheimlichst, kann dir keiner helfen - was soll die Funktion überhaupt machen?
-
@werdas_34 sagte in Pointer..:
Und wieder merke ich das ich Pointer noch nicht ganz verinnerlicht habe.
Ich verstehe zwar nicht ganz was ich jetzt groß anders hatte am Anfang. Aber ok.
Und was hat das Gefrickel dir nun gebracht? Nichts.
Du hast immer noch keine Ahnung von Pointern und weißt nicht, warum dein Programm abstürzt.
Da bist du auch nicht besser als die Leute, die nach Lektüre der Pfuscher-JW Online-Sinnfreiartikeln hier aufschlagen und behaupten, sie hätten Pointer verstanden und nur noch eine kleine Frage hätten.
-
Allen frohe Ostern und bleibt gesund.
@werdas_34 sagte in Pointer..:
Hier mal die funktionierende Funktion(Aufruf usw ist alles gleich geblieben):
int * insertw_1_svc(char **argp, struct svc_req *rqstp) { static int result; printf("%s\n", *argp); int i; for (i=0; i<nwords; i++) if (strcmp (*argp, dict[i]) == 0) return 0; printf("Test 1\n"); strcpy(dict[nwords], *argp); printf("Test 2\n"); printf("%s\n", dict[nwords]); nwords++; result = nwords; return &result; }
Ein paar Fragen an Dich, da dieser Code so nicht kompiliert.
- Was sind nwords und dict? Es müssen globale Variable sein. Weshalb sind sie global definiert?
- Der Klassiker in C, weshalb wird
int
als Typ für eine Zählvariable gewählt für etwas, was dynamisch alloziert wurde?int
s können insbesondere auf 64Bit Plattformen nicht den kompletten Wertebereich von dynamisch allozierten Feldern abdecken. Es gibt dafürsize_t
undssize_t
. - Was für einen Grund hat es den Rückgabewert als lokale statische Variable zu deklarieren und dann per Zeiger zurückzugeben?
- Weshalb wird argp als ** übergeben? Was für einen Zweck erfüllt das?
-
@werdas_34
Füge mal bitte folgendes ein:int * insertw_1_svc(char **argp, struct svc_req *rqstp) { static int result; printf("%s\n", *argp); int i; for (i=0; i<nwords; i++) if (strcmp (*argp, dict[i]) == 0) return 0; printf("Length of argp:%d \n",strlen(*argp)); printf("Space in dict on position nwords:%d",sizeof(dict[nwords])); strcpy(dict[nwords], *argp); printf("Test 2\n"); printf("%s\n", dict[nwords]); nwords++; result = nwords; return &result; }
und verrate uns mal bitte die zwei Zahlen die herraus kommen