# char als parameter an eine Programmteil übergeben



## Blondie05 (7. April 2005)

hallo,

kann ich einen char an einen anderen Programmteil übergeben. 
Ich habe das so geschrieben und es funktioniert aber nicht. 


```
#include <stdio.h>
#include <stdlib.h>

int umbenennen(char name[])
{
        newname[50]="neu";
        return 0;
}




int main(int argc, char *argv[])
{
        char name[50]="alt";

        umbenennen(name);

        printf("%s", name);
        return 0;
}
```


----------



## Konsumierer (7. April 2005)

Du kannst einen Pointer auf ein char-Array übergeben:


```
#include <stdio.h>

#define NAMELENGTH 50

void umbenennen(char * name)
{
  strncpy(name, "Neuer Name", NAMELENGTH-1);
}

int main(void)
{
  char name[NAMELENGTH] = "Hans-Peter";
  umbenennen(name);
  printf("%s",name);
  return 0;
}
```


----------



## Blondie05 (7. April 2005)

Naja, mein eigentliches Problem sieht so aus. 


```
int umbenennen(char *argv[], char *newname)
{

char oldname[50];
int rc;

        sprintf(oldname, "%s", argv[1]);
        sprintf(newname, "%s", argv[2]);

        if(rename(oldname, newname)==0)
               rc=0;
        else
               rc=1;

return 0;

}


int main(int argc, char *argv[])
{
        char newname;

         umbenennen(argv, &newname);

   

        return 0;
}
```

Ich weiß nicht, ob du verstehst, was da eigentlich rauskommen soll.
Also. In Main gebe ich ihm eine Variable an, die ich dann an "umbenennen" übergebe. In "umbenennen" soll "newname" mit dem Wert von argv geändert werden. Die Variable newname soll dann wieder an main zurückgegeben werden.
Verstanden was ich meine?
Geht das? Jaja, ich denke manchmal etwas kompliziert. Wäre auch mit einer einfacheren Lösung zufrieden.

Danke schon mal im Voraus


----------



## Konsumierer (7. April 2005)

```
int umbenennen(char *argv[], char *newname)
{

char oldname[50];
int rc;

        sprintf(oldname, "%s", argv[1]);
        sprintf(newname, "%s", argv[2]);

        if(rename(oldname, newname)==0)
               rc=0;
        else
               rc=1;

return rc;

}


int main(int argc, char *argv[])
{
        char newname[50];

        umbenennen(argv, &newname);

        return 0;
}
```

So ?


----------



## Blondie05 (7. April 2005)

Naja, nicht rc soll zurückgegeben werden, sondern der neue Name. Oder passiert das automatisch?


----------



## Konsumierer (7. April 2005)

Für was hast du dann die Variable rc?

Da du einen Pointer auf einen String übergibst, schreibt die Funktion an die Stelle an der der String auf dem Arbeitsspeicher liegt. Du musst den String also nicht zurückgeben, da er bereits in der Funktion geschrieben wird.


----------



## Blondie05 (7. April 2005)

Achso, na dann ist das ja gut!

Naja, ich muss am Ende noch nen Return-Code ausgeben. Der RC hat in diesem Zusammenhang keinen Sinn, das kommt später noch. Danke


----------



## Rene Albrecht (7. April 2005)

Ihr verwirrt mich!   


```
#include <stdio.h>
#include <string.h>

void umbenennen(char *name, char *argv[])
{
  strcpy(name, argv[1]);
}

int main(int argc, char *argv[])
{
  char name[50]="---leer---";

  umbenennen(name, argv);
  printf("%s",name);

  return 0;
}
```
geht auch einfach und super...


----------

