mikrocontroller.net

Forum: PC-Programmierung Char in Funktion übergeben und ändern


Autor: Thomas M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
foo(&i)
übergebe, aber wie mache ich es mit Zeichenketten?

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

using namespace std;

void inttochar(int i,char *ch)
{
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";
 ch="neuer Text";
 cout << "Adresse: " << &ch << "\n";
 cout << "Funktion InttoChar Wert: " << ch << "\n\n";
}


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

  inttochar(i,c);

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

  return 0;
}



Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
void bla(char **ch)
{
  *ch="neuer Text";
}

...

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

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
void inttochar(int i,char *ch)
{
 cout << "\nFunktion InttoChar Wert: " << ch << "\n";

 strcpy( ch, "neuer Text" );

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

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

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

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

 strcpy( ch, "neuer Text" );

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

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

compliert natürlich auch und ist auch korrekt.

Autor: Thomas M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an euch, besonders an Rufus!!

Das ist ein Teil eines Programms, welches mal auf einem uC laufen soll. 
Daher kann ich nicht alle C++ Funktionen benutzen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.