Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

22.03.2006, 08:53

Char als Parameter übergeben?!

Hi!

Wie kann ich denn eine Funktion schreiben, die mir als Rückabewert einen "Char" liefert? Also in der art: "return Name;"
Ich könnte ja auch einfach eine gloabale Variable erstellen in der einfach das Wort gespeichert wird! Aber das hab ich nicht hinbekommen! =(

Oder muss ich das Problem mit einem Zeiger lösen?

Gruß, Max

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

22.03.2006, 11:03

C-/C++-Quelltext

1
2
3
4
char ReturnABC(char cABC)
{
  return (cABC);
}


Oder überseh ich was elementares?

Sheddex

unregistriert

3

22.03.2006, 11:46

Ich glaube es geht um ein Array, in der Frage stand "sowas wie return Name"... Wollte ich selbst mal machen, wusste aber nicht wie...

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

4

22.03.2006, 12:22

C-/C++-Quelltext

1
2
3
4
char* classx::getName()
{
  return name_;  //name_ : char[256]

}


dieses Konstrukt kann aber zu sehr vielen Problemen führen (Objektlifetime...).

besser finde ich noch

C-/C++-Quelltext

1
2
3
4
5
void classx::getName(char* out, int maxsize)
{
  if(!out)...
  strncpy_s(out, maxsize);
}


Eine (gute) Alternative zu diesen Sachen ist, std::string bzw. std::wstring

mfg Philipp

Sheddex

unregistriert

5

22.03.2006, 12:32

Das zweite ist doch auch nur eine 'Zeigerkonstrution', ohne Rückgabewert... aber sowas würde ich sowieso mit Zeigern machen...

Anonymous

unregistriert

6

22.03.2006, 15:12

Danke für die Antworten!

Ich glaub ich mach es mit nem Zeiger!
Nein, hierbei ging es nicht mal um ein Array, sondern nur um einen simplen string! Der aber nicht Constant ist, sondern sich je nach ereignis ändert! Aber ich glaube ich habe eine Lösung gefunden!
Wenn nicht, dann meld ich mich nochmal! :)

mfg, Max

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

22.03.2006, 16:21

Nur so zur Erinnerung:
Ein String ist nichts anderes als ein Array von char oder wchar_t Elementen...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

LidlAzubi

Frischling

Beiträge: 21

Wohnort: Beerendorf

  • Private Nachricht senden

8

15.07.2006, 17:11

Da der STring nunmal mehrere Zeichen hat(oder kennst ein Name nur mit ein Zeichen?) brauchst du ein Pointer auf den String(also char* oder wchar_t*(für UNICODE))
Hier ein Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
wchar_t* Name(void)
{
    wchar_t  tmp[32];
    // Name holen

   wscanf(L"%s", &tmp);
   return tmp;
}

Hier hast du die Adresse von den String übergeben, aber ein besseres Beispiel wäre wenn du den String der zurückgegeben werdensoll, als Parameter deklarierst, sohier meine ich:

Quellcode

1
2
3
4
5
6
void GetName(wchar_t *pDestString)
{
   wchar_t tmp[32];
   wscanf(L"%s", &tmp);
   swprintf(pDestString, tmp); // swprintf ist UNICODE und in stdio.h deklariert
}
Es gibt nicht nur Schattenseiten im Leben, sondern auch Nachteile.
MfG LidlAzubi

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

15.07.2006, 17:20

wie schon oft geasgt gibt es schon eine diskrepanz in deiner Frage, da ein String eine Anreigung von x Zeichen ist. Ein char ( character ) jedoch nur ein einzelnes Zeichen.

es ist immer besser einen String, ob nun Unicode (wchar_t) oder char per Parameter zu übergeben, auch als Output.
Schlichtweg weil die Lebenszeit eines Objektes, einer Variable begrenzt ist (wie auch schon gesagt), so würde dies ein Fehler sein.

Fehler!

C-/C++-Quelltext

1
2
3
4
5
6
7
wchar_t* Name(void)
{
    wchar_t  tmp[32];         
    // Name holen

   wscanf(L"%s", &tmp);
   return tmp;                 // öhm ja ab hier extiert tmp nicht mehr, aber der Zeiger zeigt weiterhin darauf ?!?

}


p.s. nie vergessen beim zweiten Beispiel den Pointer zu prüfen ob er valid ist (also nicht NULL) und bei der erstellung eines Pointer niemals vergessen ihn auf NULL zu setzen

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

10

15.07.2006, 17:21

Wobei aber das erste Beispiel von LidlAzubi nicht funktionieren wird, da die Adresse auf eine lokale Variable zurückgegeben wird. Ein Ausweg wäre tmp static zu machen, das führt aber bei Multithreating zu großen Problemen.

Beim zweiten Beispiel sollte man unbedingt noch als Parameter die Größe des Buffers angeben können. So macht man das dann auch üblicherweise. Noch einfacher ist es aber mit std::strings.

Ciao

Werbeanzeige