Char-Array an Funktion übergeben



  • Hallo Zusammen,

    ich habe momentan folgendes Problem:
    In einem Programm soll ein Char (mglw. ist string sinvoller, hat aber bei mir nicht geklappt) an eine die Funktion übergeben werden.
    Anschließend wird in den Char dessen Dateiname über getline vom Nutzer eingegeben.

    Dieser Char soll dann jedoch auch für weitere Aktionen außerhalb /in anderen Funktionen genutzt werden können, ist deshalb außerhalb definiert.

    !!Weitere Chars die ich nur innerhalb meiner Funktionen nutze u. deklariere, dort aber mit den selben functions (getline, open...), machen mir keine Probleme.

    Das ganze sieht momentan gekürzt so aus

    //Außerhalb der Funktion  
    //ofstream aus;
    //const int Namensgröße= 100;
    //char NameDateiAus[Namensgröße]; 
    
    int DateienVorhanden(*....*,  char  & NameDateiAus)
    
     cout << "Name der Protokolldatei: ";  
        cin.getline(NameDateiAus, Namensgröße);
        aus.open(NameDateiAus);
    
    

    Meine Frage : Wie kässt sich ein Char-Array per Referenz an eine Funktion übergeben, dort "füllen" und anschließend auch über weitere Funktionen nutzen?
    Möglicherweise sieht jemand den Fehler direkt, ich bin in c++ nicht wirklich versiert.

    Danke für eure Mithilfe.

    Marius



  • @cragoras sagte in Char-Array an Funktion übergeben:

    ist string sinvoller,

    Ja!

    hat aber bei mir nicht geklappt

    ist keine Fehlerbeschreibung



  • @cragoras sagte in Char-Array an Funktion übergeben:

    Meine Frage : Wie kässt sich ein Char-Array per Referenz an eine Funktion übergeben, dort "füllen" und anschließend auch über weitere Funktionen nutzen?

    So kann man ein Array per Referenz übergeben:

    #include <iostream>
    
    constexpr std::size_t bar_size = 100;
    
    void foo(int(&bar)[bar_size])
    {
    	for (std::size_t i = 0; i < std::size(bar); ++i) {
    		std::cout << bar[i] << ' ';
    	}
    	std::cout.put('\n');
    	bar[3] = 42;
    }
    
    int main()
    {
    	int bar[bar_size] = {};
    	foo(bar);
    
    	for (std::size_t i = 0; i < std::size(bar); ++i) {
    		std::cout << bar[i] << ' ';
    	}
    	std::cout.put('\n');
    }
    

    Nimm std::string. Danke.



  • @cragoras sagte in Char-Array an Funktion übergeben:

    Möglicherweise sieht jemand den Fehler direkt, ich bin in c++ nicht wirklich versiert.

    Ein Array lässt sich implizit in einen Zeiger auf das erste Element konvertieren (T*), oder in eine Referenz auf das ganze Array (T(&)[N]). Aber nicht in eine Referenz auf das erste Element (T&).
    Daher funktioniert das so nicht:

    void Funktion(char& param);
    
    int main(){
        char array[123];
        Funktion(array); // geht nicht
    }
    

    Was geht ist:

    • Einen Zeiger übergeben
    • Eine Referenz auf das gesamte Array übergeben (siehe auch Beispiel von @Swordfish)
    void Funktion1(char* param, size_t size) {
        cin.getline(param, size);
    }
    void Funktion2(char (&param)[123]) {
        cin.getline(param, sizeof(param));
    }
    
    int main() {
        char array[123];
        Funktion1(array, sizeof(array));
        Funktion2(array);
    }
    

    mglw. ist string sinvoller, hat aber bei mir nicht geklappt

    Ja, std::string ist mit an Sicherheit grenzender Wahrscheinlichkeit sinnvoller:

    void Funktion1(std::string& str) {
        getline(cin, str); // Merke: cin.getline(str) geht _nicht_ mit std::string
    }
    // oder gleich
    std::string Funktion2() {
        std::string str;
        getline(cin, str);
        return str;
    }
    
    int main() {
        std::string str;
        Funktion1(str);
        str = Funktion2();
    }
    


  • @Swordfish und @hustbaer , mit String hat es jetzt geklappt.
    Das einlesen ging dann über getline(cin, string) .

    Furs nächste Mal weiß ich jetzt wieder etwas mehr, Danke euch. 🙂


Anmelden zum Antworten