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

1

29.01.2006, 21:29

Warum funtst dieser Code nicht?

Hallo,

was total simples - aber warum geht das nicht? Es kann sein ich übersehe was total dämliches aber ich komm echt nicht dahinter. Das es mit nem Zeiger geht hat mir jemand anders gezeigt, aber er ist nicht willig mir zu erklären warum mein Weg der falsche ist. Also ich will keine Berichtigung sondern die Erklärung warums nicht geht...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  #include <iostream> 
  using namespace std; 
   
  struct Text { 
       char Zeile[10]; 
  }; 
   
  const int x = 2; 
  
  Text Block[x];
  
  int main ()
  {
       Block[1].Zeile = "Blocktext";
       cout << Block[0].Zeile << endl << Block[1].Zeile << endl;
  
       return 0;
  }


Block[1].Zeile = "Blocktext"; --> error C2440: '=' : cannot convert from 'const char [10]' to 'char [10]'
There is no context in which this conversion is possible

Diese Variante funktioniert auch nicht (ich wollte 2x den gleichen Text von Anfang an...)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  #include <iostream> 
  using namespace std; 
   
  struct Text { 
       char Zeile[] = "Blocktext"; 
  }; 
   
  const int x = 2; 
  
  Text Block[x];
  
  int main ()
  {
       cout << Block[0].Zeile << endl << Block[1].Zeile << endl;
  
       return 0;
  }

Anonymous

unregistriert

2

29.01.2006, 21:58

Weil du arrays net kopieren kannst mit operator =

3

29.01.2006, 22:01

nuja... ich hab dir die Lösung ja gegeben... aber erklären tu ich es immer noch nicht :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
    
struct Text 
{ 
    char cZeile[128];    
}; 
    
// const int x = 2; <- wofür legst du hier ne Variabel an?!

  
Text Block[2]; 
  
int main () 
{ 
    strcpy(Block[0].cZeile, "Blocktext 1");
    strcpy(Block[1].cZeile, "Blocktext 2");

    std::cout << Block[0].cZeile << "\n" << Block[1].cZeile << std::endl; 
  
    return 0; 
}

Hoffentlich hab ich nix vergessen :D habs net überprüft :D

[edit]mist.. nix da war schneller...
PS: Das ist nur eine von vielen Möglichkeiten :D geht auch wie ich dir schon gesagt hab mit Zeigern...

C-/C++-Quelltext

1
2
3
char* pcZeile; 
Block[0].pcZeile = "Blocktext 1";
Block[1].pcZeile = "Blocktext 2";

[/edit]
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

4

29.01.2006, 22:06

Zitat von »"nix da"«

Weil du arrays net kopieren kannst mit operator =


Aber im Buch geht das. Beispielszeile:

C-/C++-Quelltext

1
char Zeichenfolge[] = "String 1";


Ach mann ich blick nich durch -.-

Warum gehts mit Zeiger. Warum gehts hier im Beispiel bei der Deklaration und bei mir nicht. Wie muss ich es anders machen OHNE Zeiger. Das muss doch auch so gehen. Bei Oberon gehts auch..

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

29.01.2006, 22:21

Im Buch solte stehen char Zeichenfolge[] = {"String 1"};
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

29.01.2006, 22:25

vergiss am besten solchen Blödsinn, ja es geht auch so. Viel besser und sicherer ist es mit strcpy, oder nimm gleich strings. dann kannst du auch sagen:

Quellcode

1
std::string mystr = "hallo"
;

7

29.01.2006, 22:38

@Nox

Nein das steht da nicht.

@Koschka

Soweit bin ich als Noob noch nicht :/ Ich merks mir aber vor.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

30.01.2006, 00:09

Nochmal zu deiner Frage.

char zeichen[] = "String"; bedeutet das zeichen[0] == 'S' gesetzt wird u.s.w.
besser und meiner Meinung einfach sauberer ist strcpy(...); macht genau das gleiche, und fügt am ende noch ein '\0' hinzu. Weil die Strings ja auch terminieren müssen.

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

9

30.01.2006, 08:14

besser noch du nimmst strcpy_s. Das entspricht dem neuen Standart und verhindert einen Pufferüberlauf ;)

C-/C++-Quelltext

1
2
3
4
char acZiel[256];
strcpy_s(acZiel,
        _countof(acZiel),
        "string zum kopieren");


_countof is n Hilfsmakro, dass dir die Arbeit abnimmt die Größe des Ziel als 2ten Parameter zu übergeben

Wenn du mal zu std::string kommen solltest wirst du merken -> viel komfortabler als C-Strings ;)
Ich würde die Welt gern verbessern, doch Gott gibt mir den Sourcecode nicht! :-(

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

30.01.2006, 08:29

wieso dem neuen Standart? Strcpy entspricht doch schon allein dem C Standart und strlen gibt dir die Länge. Wenn du sowas in Cpp Machst nimmst du doch streams oder strings....

Werbeanzeige