Problem beim zurückgeben eines Char - Arrays aus einer Funktion



  • Hallo,

    schätze, das Thema ist nicht neu, aber leider funzte die Suchfunktion bei mir nicht....

    Also, folgendes:

    int main()
    {
      void fncT(char arr[]);
      char sArr[128];
    
      fncT(sArr);
      printf("\n %s", sArr);
    
     return 0;
    }
    
    void fncT(char arr[])
    {
      arr= "irgendwas";
      printf("\n %s", arr);
    }
    

    Mein Problem: ich benötige den String (das char- Array) in der main()- Funktion, aber dort kommt nach dem Funktionsaufruf nichts an; in der Funktion "fncT()" selbst wird der String noch richtig ausgegeben.
    Weise ich dem Array die Zeichen in der Funktion einzeln zu, also:

    arr[0]= 'i';
     arr[1]= 'r';
    /* usw. */
    

    dann erhalte ich auch in der main()- Funktion meinen String......

    Big Questionmark.....

    Gruß
    ProggerTotal



  • void fncT(char *arr);
    
    int main()
    {
      char sArr[128];
    
      fncT(sArr);
      printf("\n %s", sArr);
    
     return 0;
    }
    
    void fncT(char *arr)
    {
      strncpy (arr, "irgendwas", 128);
      printf("\n %s", arr);
    }
    


  • Hallo,
    danke für die Antwort.
    Leider hat die Sache einen Haken:

    "strncpy" meldet bei Verwendung eines Zeigers immer eine Zugriffsverletzung.....
    (obwohl doch eigentlich jedes Array im Prinzip ein Zeiger ist?).

    Was mich vor allem auch mal interessieren würde, ist, warum ich beim expliziten Zuweisen des Array- Inhalts (also das einzelne Zuweisen der Zeichen wie von mir im Ursprungsposting dargestellt) keine Probleme mit der "Rückgabe" des Arrays habe; ich meine, was im Array drin ist, ist doch drin?
    Ist ja nicht so, dass es sich hier um eine lokale Variable der aufegrufenen Funktion handelt...

    Gruß
    ProggerTotal



  • ProggerTotal schrieb:

    "strncpy" meldet bei Verwendung eines Zeigers immer eine Zugriffsverletzung.....
    (obwohl doch eigentlich jedes Array im Prinzip ein Zeiger ist?).

    char sArr[128] = {0};
    strncpy (sArr, "irgendwas", sizeof(sArr)-1);
    


  • ProggerTotal schrieb:

    Hallo,Was mich vor allem auch mal interessieren würde, ist, warum ich beim expliziten Zuweisen des Array- Inhalts (also das einzelne Zuweisen der Zeichen wie von mir im Ursprungsposting dargestellt) keine Probleme mit der "Rückgabe" des Arrays habe; ich meine, was im Array drin ist, ist doch drin?

    In deiner Version wird der lokalen variable arr beim Aufruf von fncT() der zeiger auf sArr zugewiesen. In fncT() überschreibst du dann in arr den Zeiger auf sArr mit dem Zeiger auf "irgendwas". Du überschreibst also nicht den Inhalt des Arrays sondern nur den Zeiger. Zeichenkettenkonstanten sind nämlich auch Zeiger genauso wie char-arrays!



  • Hallo,

    mit der Dimension hat(te) das in meinem Fall nichts zu tun.

    Es funktioniert jedenfalls jetzt, wieso auch immer (der gleiche Programmaufbau wie gestern mit strncpy, aber die lief es nicht und eben auf einmal.... naja, ein Zufallsgenerator namens "PC").

    Gruß und danke für die Hilfe
    ProggerTotal


Anmelden zum Antworten