Übergabe von Zeichenkette
-
Hallo Profis,
ich hab mal ne (wahrscheinlich nervige) Anfängerfrage. Steige gerade in das ganze Thema C ein und und werde aus den ERgebnissen der Google Suche nur bedingt schlau.
Ich denke mal, ziemlich einfache Thema;
Ich habe in einer Funktion zwei geschachtelteFor Schleifen. In diesen Schleifen werden die beiden Werte der Schleifen in eine Unterfunktion übergeben zum berechnen.for (int day = 1; day < 32; day++) { for (int m = 1; m < 13; m++) { if (m==1) { x = day_of_week(day, 11, year-1); . . .
Das ist ja erstmal nicht das Problem. Das eigentliche Problem ist, dass in der Unterfunktion, die verschiedenen Ergebnisse festen Wörtern zugeodrnet werden sollen, welche ich in dann in meiner Hauptfunktion weiterverarbeiten möchte, da ich diese an späteren Stellen auch noch benötige.
Wisst ihr soweit was ich meine?!
Nun weiß ich allerdings nicht wie ich die Übergabe von Arrays realisiere. Ich habe gelesen, dass man das am besten über Pointer gemacht, nur tu ich mich mit diesem Thema ziemlich schwer.
Wenn vielleicht jemand ein Stück Code für mich hätte, in dem ich nachvollziehen kann, wie ich das realisiere?!
Danke schonmal
Gruss Alex
-
array übergeben geht, aber brauchst du nicht unbedingt.
du kannst die festen wörter (ich nehme an du meinst die wochentage) in einem array speichernchar* days[] = {"Montag", "Dienstag", ...}
und lässt dir von deiner funktion den index oder den zeiger auf den wochentag zurückgeben, je nach bedarf.
wenn du aber den tag in ein array kopieren willst als parameter übergeben.
int day_of_week(int day, int month, int year, char* buffer); char wochentag[11]; x = day_of_week(day, 11, year-1, wochentag);
eine kleine sicherheitsmaßnahme wäre evtl. die größe des puffers zu übergeben und dann innerhalb der funktion zu testen, ob die größe ausreicht.
int day_of_week(int day, int month, int year, char* buffer, size_t bufersize); char wochentag[11]; x = day_of_week(day, 11, year-1, wochentag, sizeof(wochentag));
-
foolie schrieb:
wenn du aber den tag in ein array kopieren willst als parameter übergeben.
-> wenn du aber den tag in ein array kopieren willst, kannst du es als parameter übergeben.
-
danke schonmal für die Hilfe. Mit den WOchentagen hast du recht
array übergeben geht, aber brauchst du nicht unbedingt.
du kannst die festen wörter (ich nehme an du meinst die wochentage) in einem array speichernchar* days[] = {"Montag", "Dienstag", ...}
dieses packe ich sozusagen in meine hauptfunktion?
und lässt dir von deiner funktion den index oder den zeiger auf den wochentag zurückgeben, je nach bedarf.
ok, aber wie realisiere ich das? Das ist mein Problem
hab es zur zeit ziemlich "stümperhaft" so gemacht
switch (w) { case 0: char weekday[3]={"So"}; break; case 1: char weekday[3]={'Mo'}; break; case 2: char weekday[3]={'Di'}; break; case 3: char weekday[3]={'Mi'}; break; case 4: char weekday[3]={'Do'}; break; case 5: char weekday[3]={'Fr'}; break; case 6: char weekday[3]={'Sa'}; break; }
aber klappt halt, wie schon gesagt nicht
-
gast 08156 schrieb:
char* days[] = {"Montag", "Dienstag", ...}
dieses packe ich sozusagen in meine hauptfunktion?
dahin, wo es sinnvoll ist. es in die funktion zu packen wäre ne möglichkeit.
gast 08156 schrieb:
und lässt dir von deiner funktion den index oder den zeiger auf den wochentag zurückgeben, je nach bedarf.
ok, aber wie realisiere ich das? Das ist mein Problem
hab es zur zeit ziemlich "stümperhaft" so gemacht
switch (w) { case 0: char weekday[3]={"So"}; break; case 1: char weekday[3]={'Mo'}; break; case 2: char weekday[3]={'Di'}; break; case 3: char weekday[3]={'Mi'}; break; case 4: char weekday[3]={'Do'}; break; case 5: char weekday[3]={'Fr'}; break; case 6: char weekday[3]={'Sa'}; break; }
aber klappt halt, wie schon gesagt nicht[/quote]
der ansatz mit switch ist schon ganz ok.
das array weekday darf aber nicht lokal sein, und die zuweisung klappt so auch nicht: die zeichen müsstest du ins array kopieren, das du per zeiger übergibst, entweder mit strcpy, strncpy oder zeichen für zeichen.char* day_of_week1(int n) { char* days[] = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; if(n >= 0 && n <= 6) return days[n]; } char* day_of_week2(int n, char* buffer) { char* days[] = {"Montag","Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; if(n >= 0 && n <= 6) { strcpy(buffer, days[n]); return days[n]; } else { return NULL; } } void day_of_week3(int n, char* buffer) { char* days[] = {"Montag","Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; switch(n) { case 0: strcpy(buffer, days[n]); break; // ... } } int main(void) { char buffer[16]; puts(day_of_week1(0)); day_of_week2(0, buffer); puts(buffer); day_of_week2(0, buffer); puts(buffer); return 0; }
-
Super, vielen Dank!! Die dritte Variante hat mir gut weitergeholfen
-
foolie schrieb:
void day_of_week3(int n, char* buffer) { char* days[] = {"Montag","Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; switch(n) // Warum das switch? { case 0: strcpy(buffer, days[n]); //Welchen Wert hat denn n hier? Genau: 0 break; // ... } }
Das ganze switch- Gedöns kannst du auch damit machen:
if (n>= 0 && n < 7) strcpy(buffer, days[n]);
Wobei das Array auch noch static machen würde. Und den buffer auch als Rückgabewert.
char *day_of_week3(int n, char* buffer) { static char* days[] = {"Montag","Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; if (n>= 0 && n < 7) strcpy(buffer, days[n]); return buffer; }
-
DirkB schrieb:
Das ganze switch- Gedöns kannst du auch damit machen:
ich bin auf den code des te eingegangen, das es geht ist mir klar,
siehe day_of_week1 und day_of_week2.
-
Sorry, Asche auf mein Haupt.
-
DirkB schrieb:
Sorry, Asche auf mein Haupt.
*grins*
*tätschel*