variable Paramterlisten
-
Also ich habe folgender Problem! Ich hab mal schnell ein kleines Programm geschrieben, was mir die oft mühsamen strcat Funktion ersparen soll. Es erstellt einfach durch Aufzählung der einzlnen Komponenten einen String, mit dem man später weiterarbeiten kann.
So und nun mein Problem:
Wie ihr unten seht rufe ich 2xmal die Funktion auf. Einmal mit vielen beliebigen Strings und einmal mit Variablen, die vorher definiert wurden.
Beim ersten Aufruf macht er alles richtig, aber beim zweiten nimmt er nur 2 Argumente, WARUM?. er nimmt ja auch beim erstenmal alle stringe und nicht nur zwei.
Naja wahrscheinlich ist die Lösung eh ganz simpel, aber im vorraus schon danke für mögliche Lösungen.Fabulous
/*Dies ist ein Programm mit dem es möglich ist ohne lange mit strcat arbeiten zu müssen, mehrere Strings schnell und einfach miteinander verbinden kann*/ #include <stdio.h> #include <conio.h> #include <string.h> #include <stdarg.h> void connect(char[80],char[80],...); //Prototyp der Funktion main() { char probe[80]={"Connect kann Strings"}; char probe_2[80]={"verbinden"}; char space[2]={" "}; connect("DAS ","\n","IST ","EIN"," ","TEST ","_&_"); //hier wird die Funktion aufgerufen, mit _&_ wird das Ende gekennzeichnet printf("\n"); connect(probe,space,probe_2,"_&_"); //hier nun ein Bsp mit Variablen die übergeben werden getch(); }//end main /* Funktion zum Verbinden von Strings * * Als letztes Argument wird immer _&_ erwartet */ void connect(char a[80], char b[80], ...) { va_list params; char summe[200]={""},param[200]={""}; //Hilfevariablen werden gleich mit 0 initialisiert char *s; strcat(summe,a); strcat(summe,b); strcat(param,b); va_start(params,b); //Das Makro va_start initialisiert params mit der Adresse des ersten optionalen Arguments //Dazu muss als zweiter Parameter der letzte Pflichtparameter eingegeben werden while(s!="_&_") { s = va_arg(params,char*); //hier wird param sukzessive jedes Wahlargument übergeben werden //der zweite Parameter ist der erwartete Datentyp if(s=="_&_") break; //hier wird abgebrochen wenn das Argument gleich _&_ ist strcat(summe,s); } va_end(params); //Die Var param wird mit Hilfe von va_end zurückgesetzt printf("%s",summe); //Der endgültige String wird ausgegeben }//end add<edit>Bitte Code-Tags verwenden</edit>
-
schalt mal alle compilerwarnungen ein, dann wirst du es wissen
-
Was sofort auffällt - String-Litarale werden eigentlich nicht in {} eingeschlossen
(also richtig: "char space[2]=" ";")
-
Also ich hab mich da jetzt noch gespielt und auch gesucht, aber ich find den Fehler nicht. Im Internet hab ich leider auch nix gefunden, aber danke für den Tipp mit der Stringdefinition, schaut echt besser aus.
-
Der Vergleich mit "&" vergleicht Adressen und keine Inhalte. strcmp verwenden.
-
Also irgendwie hat sich das Problem gelöst. Ich hab die ganze Zeit mit Dev-C++ programmiert, wo es bis jetzt nicht funktioniert. Aber in Borland C konnte ich mit der Einfügung von strcmp den Fehler beheben. Danke nochmal für die schnelle HIlfe.
-
Bitte denke daran, dass du s noch initialisieren musst. Bereits das Lesen eines unitialisierten Pointers führt zu undefiniertem Verhalten.