Die übergabe von 2d-char-array in Funktion
Ich versuche zu pass ein 2D-array mit strings in einer Funktion. Ich bekomme immer wieder die
erwartet Ausdruck vor ] token.
Den Punkt dieses Kodex ist zu Lesen in einem wordsearch puzzle, dann finden Sie die Wörter in das Rätsel. Ich werde schriftlich eine Funktion für Suchlauf vorwärts, backword suchen, und dann nach oben und nach unten suchen.
Wie bekomme ich diesen Fehler loszuwerden? Der Fehler ist unten, ganz unten, wo ich den Anruf weiterleiten-Funktion.
/*Andrea Hatfield CPE 101 October 31st, 2012*/
#include <stdio.h>
#include <string.h>
int forward(char words[][8], char puzzle[][11]);
int main()
{
char puzzle[11][11];
char words[8][8];
FILE *fin, *fwords;
int i = 0;
int j= 0;
fin = fopen("puzzle.in", "r");
fwords = fopen("words.in", "r");
if(fin == NULL) /*Reads in the puzzle file*/
printf("File does not exist");
else
{
while(fscanf(fin,"%s", puzzle[i])!=EOF)
{
printf("%s\n", puzzle[i]);
i++;
}
}
if(fwords == NULL) /*Reads in the words the puzzle will search for */
printf("File does not exist");
else
{
while(fscanf(fwords, "%s", words[j])!=EOF)
{
printf("%s\n", words[j]);
}
}
forward(&words[][8], &puzzle[][11]); /*Error at this point*/
return(0);
}
- Herzlich willkommen auf Stackoverflow, kannst du bitte eine klare Frage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein wenig schwer zu bekommen, was Sie wollen zu tun, sondern es ist ein problem hier:
versuchen Sie dies:
Hier sind zwei weitere Optionen, sollte erwähnt werden, aus hier:
Müssen Sie rufen Sie direkt
Allerdings hast du einen Fehler in deinem code: du hast vergessen die
j++
im lese-Zyklus beim Lesenwords
, so sind Sie überschreibenwords[0]
und nicht die Initialisierung der anderen Mitglieder der Reihe.Auch, in einer realen situation, vielleicht finden Sie es wünschenswert, wählen Sie die array-Größe zur Laufzeit. Ein einfacher Weg, es zu tun wäre, um wählen Sie eine hinreichend große Begrenzung für Breite und Höhe, und gehen Sie mit 0x90 Lösung (Sie benötigen eine 30x20 puzzle, und Sie können es leicht zu behandeln, da Sie kompiliert mit ZEILEN und SPALTEN gleich, sagen wir, 1024).
Ein komplizierter Weg wäre, um
malloc()
(mit Zeiger auf Zeiger auf chars) und weisen beide arrays dynamisch, begrenzt durch den verfügbaren Speicher; Sie würde übergeben Sie dann Ihren Abmessungen derforward
Funktion.Doch, die Zuteilung wäre komplizierter gegeben, die Schleife ruft zu
malloc()
und die Notwendigkeit zu prüfen, den return-Wert jedes mal abzufangen, out-of-memory Bedingungen; auch in einigen Szenarien, die Sie möchten, könnte der Speicher sein dezugeordnet (z.B. zum ausführen von wiederholten Rätsel), das führt zu weiterer Komplexität.