Gast
#2432700
Wieso liefert strlen 0 zurück aber eine manuelle Suche nach dem Null-Terminator ist erfolgreich?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
len = 0 aber length = 10 Ich kann es mir nicht erklären habt Ihr eine Idee?
|
Anzeige
|
strlen Probleme
Gast
#2432700
Wieso liefert strlen 0 zurück aber eine manuelle Suche nach dem Null-Terminator ist erfolgreich?
len = 0 aber length = 10 Ich kann es mir nicht erklären habt Ihr eine Idee?
Gast
#2432718
Manuel schrieb: > char* stringArray[5]; Manuel schrieb: > stringArray[1][length]
Gast
#2432725
Wiederspruch Euer Ehren schrieb: > Manuel schrieb: >> char* stringArray[5]; > > Manuel schrieb: >> stringArray[1][length] Passt doch, Stern beachten!
Gast
#2433047
ausfüllen schrieb: > Passt doch, Stern beachten! Grummer, grummel, grummel... ;-) OK 2. Versuch: Müsste es dann nicht
heissen? erstens ist das & beim Aufruf von dllFunction falsch, zweitens schreibt man ++ ohne Leerzeichen dazwischen. Solange du hier irgendwas als Quelltext zeigst, was nie gelaufen ist, kann man lange rätseln. Copy&paste ist zu schwer? Ein Semikolon fehlt übrigens auch.
Gast
#2433417
Also abgesehen von dem fehlenden Semikolon läuft der Code genauso. @Wiederspruch Euer Ehren: Der erste Index von stringArray darf zwischen 0 und 4 liegen, ich werte alle aus, aber habe hier als Beispiel einfach mal den zweiten Wert gewählt. @Klaus Wachtler: Wo ist denn ein Leerzeichen zwischen ++? Wenn ich das & entferne wird mir folgender Fehler angezeigt: "Das Argument vom Typ 'char **' ist mit dem Parameter vom Typ 'char ***' inkompatibel" Hoffe immer noch auf Eure Hilfe, denn ich verstehe es einfach nicht. Wg. des ++: da hatte ich wohl den falschen Browser.... Aber generell ist es schon so, daß man an einem Stück Quelltext, das nur einen Bruchteil des Problems zeigt und dann noch nicht mal das korrekt, keine Fehler suchen muß - das ist Zeitverschwendung. Die Mühe, das Problem angemessen darzustellen, kann man sich schon machen, bevor man anderer Leute Zeit klaut.
Gast
#2433456
@Klaus Wachtler du beschwerst dich jetzt nicht ernsthaft dass du in deiner Freizeit (wahrscheinlich Arbeitszeit) anderen hilfst und dann dich dann auch noch beschwerst wenn du keine Lösung findest weil du das Problem nicht verstanden hast. Und zweitens warum maßt du dir an, dass der dllaufruf falsch ist. Woher willst du denn wissen was für Parameter die Funktion braucht. Kannst du mir bitte sagen wo man den Kurs "Hellseherische Codeanalyse" machen kann? @TO versuch mal mit einer Hilfsvariable char* stringArray[5]; char* help; dllFunktion(&stringArray); help = stringArray[1]; len = strlen(help); Sebastian L. schrieb: > Und zweitens warum maßt du dir an, dass der dllaufruf falsch ist. Woher > willst du denn wissen was für Parameter die Funktion braucht. Es ist in C ausgesprochen selten, dass ein solcher Parameter als char *(*p)[5] deklariert wird. Hast schon recht, wirklich wissen kann er es nicht, aber alle Erfahrung sagt eben, dass bei &array ein Missverständnis über den Umgang mit Arrays und Pointern vorliegt. A. K. schrieb: > Sebastian L. schrieb: > >> Und zweitens warum maßt du dir an, dass der dllaufruf falsch ist. Woher >> willst du denn wissen was für Parameter die Funktion braucht. > > Es ist in C ausgesprochen selten, dass ein solcher Parameter als > char *(*p)[5] > deklariert wird. Hast schon recht, wirklich wissen kann er es nicht, > aber alle Erfahrung sagt eben, dass bei &array ein Missverständnis über > den Umgang mit Arrays und Pointern vorliegt. eben. So wie das da verwendet wird, liegt kein Grund dafür vor. Welche Information hast du denn über die DLL-Funktion. Ich denke nämlich tatsächlich, dass die falsch verwendet wird. Ansonsten: stringArray mit dem Debugger mal auf Byteebene untersuchen. (Daten ansehen)
Gast
#2433487
was spräche dann dagegen das ganz mal auszugeben.
dann wird man doch sehen was drin ist.
for(int i = 0;i<5i++)
{
printf("%s",stringArray[i]);
}
Sebastian L. schrieb: > was spräche dann dagegen das ganz mal auszugeben. > dann wird man doch sehen was drin ist. Das wäre zu einfach. BTW: Dir fehlt ein Semikolon zwischen 5 und i, aber das dürfte nur ein Tippfehler sein. for (int i = 0; i < 5; i++)
Gast
#2433513
Warum wäre das zu einfach :) ja es ist ein tippfehler; > Wenn ich das & entferne wird mir folgender Fehler angezeigt: > "Das Argument vom Typ 'char **' ist mit dem Parameter vom Typ > 'char ***' inkompatibel" Also will die Funktion einen char*** haben. Ich rate jetzt mal ins Blaue. Normal kommt so etwas nur dann vor, wenn die Funktion selber sowohl das Pointer Array als auch die Strings anlegt. Mit einem char* Strings[5]; erlaubst du ihm das aber nicht und hast dich nur syntaktisch irgendwie aus der Affäre gezogen und den Code soweit verändert, dass der Compiler zufrieden gestellt ist. Falsch bleibt es trotzdem. Wenn ich recht habe, dann wird diese Funktion so benutzt:
Wie gesagt: Aus der Erfahrung heraus würde ich das für die wahrscheinlichste Variante halten, warum die Funktion einen char*** haben will. Kann natürlich alles auch ganz anders sein. Daher: Doku studieren!
Gast
#2438673
@Karl Heinz Buchegger: Vielen Dank mit deinem Beispiel passt es nun, du hattest recht bzgl. der Parameterübergabe! Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|