Char in Funktion übergeben und ändern

Gast #1609612
Lesenswert?

Hallo,

wie kann ich in eine Funktion ein char übergeben und diesen in der 
Funktion ändern?
Mit int usw ist es mir klar, dass ich die Adresse mit zB
1
foo(&i)
übergebe, aber wie mache ich es mit Zeichenketten?

Anbei mein Versuchsprogramm. Der String "neuer Text" wird nicht mehr im 
Hauptprogramm ausgegeben.
1
// Konsolenanwendung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
2
//
3
#include "stdafx.h"
4
#include "iostream"
5

6
using namespace std;
7

8
void inttochar(int i,char *ch)
9
{
10
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
11
 ch="neuer Text";
12
 cout << "Adresse: " << &ch << "\n";
13
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
14
}
15

16

17
int _tmain(int argc, _TCHAR* argv[])
18
{
19
  char *c = "alter Text";
20
  
21
  int i = 67;
22
  cout << "Wert von i: " << i << "\n";
23

24
  inttochar(i,c);
25

26
  cout << "Wert vom String: " << c <<"\n";
27
  cin >> i;
28

29
  return 0;
30
}
Gast #1609625
Lesenswert?

wenn du schon die std verwendest kannst du auch gleich ein string 
nehmen.

Wenn du es mit char* machen willst, dann darfst du das hier nicht machen

ch="neuer Text";

dafür müsstest du z.b. strcpy( ch, "neuer Text" ) verwenden, dabei musst 
du aber aufpassen das du nur soviel text speichest (Kopierst) wie die 
Platz in dem Zeiger hast.
Persönliche Seite #1609631
Lesenswert?

Es geht nicht um Zeichenketten, es geht um Pointer.

Du bist schon recht nahe dran; um ein Objekt zu verändern, musst Du 
dessen Adresse übergeben. Egal, was für eine Art von Objekt das ist.

Also musst Du die Adresse des Pointers übergeben:
1
void bla(char **ch)
2
{
3
  *ch="neuer Text";
4
}
5

6
...
7

8
char *c = "alter Text";
9
  
10
bla(&c);

Beachte, daß es hier um Pointer geht, die auf Strinkonstanten zeigen, 
aber nicht um die Zuweisung oder gar Änderung von Zeichenketten.
#1609637
Lesenswert?

Rufus t. Firefly schrieb:

> Beachte, daß es hier um Pointer geht, die auf Strinkonstanten zeigen,
> aber nicht um die Zuweisung oder gar Änderung von Zeichenketten.

Und genau aus dem Grund sollte man auch anfangen const-Korrekt zu 
programmieren.
1
void inttochar(int i,char *ch)
2
{
3
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
4

5
 strcpy( ch, "neuer Text" );
6

7
 cout << "Adresse: " << &ch << "\n";
8
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
9
}

würde nämlich compilieren, obwohl es in diesem Zusammenhang völlig 
falsch ist!

Auch ein
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
  const char *c = "alter Text";
4
  
5
  int i = 67;

wäre nicht verkehrt gewesen.
1
void inttochar(int i, const char *ch)
2
{
3
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
4

5
 strcpy( ch, "neuer Text" );
6

7
 cout << "Adresse: " << &ch << "\n";
8
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
9
}

hingegen würde nicht compilieren. Das const fängt den Fehler ab.
1
void bla( const char **ch)
2
{
3
  *ch="neuer Text";
4
}

compliert natürlich auch und ist auch korrekt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren