Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C (C89, C99 und C11) ::  Probleme mit Char-Zeigern und arrays     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 10:18:45 02.08.2012   Titel:   Probleme mit Char-Zeigern und arrays            Zitieren

Hallo, ich habe ein Problem.

Ich bekomme einen zeiger auf ein char. Dort stehen bis zu 25einzelne Zeichen drin. Diese möchte ich nun in ein array schieben, aber in anderer Reihenfolge.
D.h. die daten, auf die mein char Zeiger zeigt sind in der Reihenfolge 123456789 und wenn dies mit 12 anfängt möchte ich in mein array schreiben. Und mein Array soll eine feste größe von 15 haben, also 15 Einträge, die wie folgt aussehen:
Array[0]=x04
Array[1]=x84
Array[1]=x37
usw.
Dabei habe ich mehrere Probleme:
1. Standardbelegung auf Null meines Arrays
Code:
Unsigned char ARRAY[15] = ('0');
<-- laut einem Buch ist das eine Vorbelegung auf 0, funktioniert aber nicht, es kommt char kann nicht in unsigned char umgewandelt werden.
2.selbiges bei der Belegung der einzelnen Felder.
3.Bei der Abfrage, ob mein *char mit 12 anfängt, bin unschlüssig, wie ich das machen soll, denn einfach ein if(bla=12) geht ja nicht, weil das ja noch mehr Inhalt hat. Genauso mit den Daten dann rausholen, also zb. das 6 Zeichen an Position 3meines Array schreiben...

Ich will hier keine fertige Lösung, auch wenn ich die natürlich nehme, aber vllt. etwas Hilfe für Dummies und/oder ein gutes Tutorial!
Danke schonmal!
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 13:18:02 02.08.2012   Titel:   Re: Probleme mit Char-Zeigern und arrays            Zitieren

KalrHeinz schrieb:

1. Standardbelegung auf Null meines Arrays
Code:
Unsigned char ARRAY[15] = ('0');
<-- laut einem Buch ist das eine Vorbelegung auf 0, funktioniert aber nicht, es kommt char kann nicht in unsigned char umgewandelt werden.!


- unsigned wird klein geschrieben.
- In welchem Buch steht das denn so? Sicher, dass du alles korrekt abgetippt hast?
- Willst du mit 0 oder mit '0' initialisieren. Das ist ein großer Unterschied, der dir eventuell nicht bewusst ist. 0 ist eine binäre Null (ASCII-Code 0), '0' ist das Zeichen '0' (ASCII-Code 48).
- Probier doch mal so:

C++:
unsigned char ARRAY[15] = {0};  //alle Elemente deines Arrays haben jetzt den Wert 0 (man beachte die geschweiften Klammern!)

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?


Zuletzt bearbeitet von _matze am 13:18:52 02.08.2012, insgesamt 1-mal bearbeitet
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 17742
Beitrag Bashar Mitglied 13:21:58 02.08.2012   Titel:              Zitieren

Hm, soll das jetzt wirklich C++/CLI sein? Sieht nach C aus.

_________________
OSL♥
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 13:41:00 02.08.2012   Titel:              Zitieren

Hallo,

@Bashar
ich bin noch ein Noob, es ist sicherlich C mit Teilen von C++, zumindest nutze ich cout usw., auch wenn das in meine Beispiel nicht rüberkommt, nutze also das nahezu übliche C/C++ Mischmasch, falls dann falsch, sry!

@matze
Vielen Dank. Ja steht so in einem Buch, aber man sollte die richtigen Klammern nutzen, dann funktioniert das auch! also {geschweifte} statt (normaler).
Ja ich möchte eine '0' reinschreiben, also ASCII, also auch der Unterscheid ist bewusst. unsigned klein, auch klar, hab dne Code nicht kopiert, sondern schnell ne eingetippt, daher der Fehler.
Frage 1 und 2 wären damit gelöst, wie folgt:
Code:
unsigned char ARRAY[15] = {'0'};  //array anlegen, mit '0' belegen
ARRAY[0]=(unsigned char) ('A');  //array platz 1 mit 'A' belegen, explizit auf unsigned char casten
ARRAY[1]=(unsigned char) ('B');


Wie man sieht, habe vorher noch nicht wirklich mit arrays gearbeitet!
Nochmals Danke, erstmal die Probleme gelöst, ich versuche es weiter und melde mich bei Bedarf nochmals!
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 13:52:51 02.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
es ist sicherlich C mit Teilen von C++, zumindest nutze ich cout usw., auch wenn das in meine Beispiel nicht rüberkommt, nutze also das nahezu übliche C/C++ Mischmasch, falls dann falsch, sry!


Das ist richtig, du benutzt einen C/C++ Mischmasch. Hier ist aber C++/CLI. Das ist eine andere Sprache. Es gibt entsprechende Unterforen für C und C++. Ich denke, das Problem ist einfach, dass C++/CLI in der Übersicht über den C- und C++-Foren liegt. Das passiert ständig. :)

KalrHeinz schrieb:

Code:
unsigned char ARRAY[15] = {'0'};  //array anlegen, mit '0' belegen



Das funktioniert so leider nicht. Damit setzt du das erste Element auf '0', nicht alle 15. Die werden mit 0 initialisiert. Dies hier wäre eine Möglichkeit:

C++:
unsigned char ARRAY[15] = {'0'};
std::fill(&ARRAY[0],&ARRAY[15],'0');  //alle Elemente (ARRAY[0] bis ARRAY[14]) haben den Wert '0'

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?


Zuletzt bearbeitet von _matze am 14:00:25 02.08.2012, insgesamt 2-mal bearbeitet
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 14:07:09 02.08.2012   Titel:              Zitieren

ja das mit dem Unterforen ist hier etwas unübersichtlich, ich musste auch ersteinmal MFC googlen...

okay... das mit der Initalisierung stimmt soagr, lasse mir mein array Testweise wie folgt ausgeben:
Code:
for (int i=0;i<15;i++) {
    unsigned char j = ARRAY[i];
    cout<<"Data:"<<hex<<ARRAY[i]<<endl;
}


So werden mir ja perfekt die ASCII Zeichen direkt ausgegebn. Wenn ich den hex Code davon sehen will, wie mache ich dass? Denn ändere ich das ds hex auf dec, wird mir dasselbe angezigt, würde aber gerne zusätzlich, wenn ein 'A' als Ascci dort steht mir auch die 41hex anzeigen lassen, bzw 0x41?
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 14:13:56 02.08.2012   Titel:              Zitieren

C++:
    for (int i=0;i<15;i++) {
        std::cout << "Data:" << ARRAY[i] << " (0x" << std::hex << (int)ARRAY[i] << ")" << std::endl;
    }

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 14:39:47 02.08.2012   Titel:              Zitieren

a) muss ich mich hier mal fest anmelden!

b) vielen Dank!

c) hier fehlt so ein gefällt mir oder hat mir sehr geholfen Button, denn das hast Du _matze!

d) funktioniert es, auch die Abfragen klappen... mit viel lesen und etwas Hilfe bekomme ich sogar hin, was ich wollte!
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 14:46:18 02.08.2012   Titel:              Zitieren

Kein Thema, dafür ist das Forum ja da. :)

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 15:12:56 02.08.2012   Titel:              Zitieren

und deswegen nerve ich etwas weiter...

möchte nun 4 array-Felder, ARRAY[6] bis ARRAY[9] als Zahl zusammenfügen.
Hintergrund, da stehen hex Zaheln (nicht ascii) drinnen, die zusammen aber eine Zahl ergeben, allerdings eben auch 2er Komplement. Ich möchte dann wissen ob größer oder kleiner Null und in 1000er 100er usw. Stellen aufteilen. Es ist immenroch ein char array!
Bsp nicht code sondern einfach für Verständnis:
ARRAY[6]=0x00
ARRAY[7]=0x00
ARRAY[8]=0x4e
ARRAY[9]=0x20
daraus will ich ein int 0x00004e20 haben, was der Zahl 20000dezimal entspricht.
Wäre es eine negative Zahl (2er Komplement) stünde also für eine -20000:
ARRAY[6]=0xff
ARRAY[7]=0xff
ARRAY[8]=0xb1
ARRAY[9]=0xe0 --> ffffb1e0!

Gibts eine direkt Wandlungsfunktion dafür? Sonst wird das mit dem positiv oder negativ erkennen schwer!
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17114
Beitrag C++ Forumbot Forumbot 15:20:49 02.08.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C (C89 und C99) verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
wandl0r
Unregistrierter




Beitrag wandl0r Unregistrierter 15:46:44 02.08.2012   Titel:              Zitieren

eine direkte wandlungsfunktion kenne ich nicht.
ich würde erstmal die 4 einzelnen arrays in ein array kopieren und dann die zahl
per atoi bzw strtoul extrahieren.
wandl0r
Unregistrierter




Beitrag wandl0r Unregistrierter 15:49:43 02.08.2012   Titel:              Zitieren

oh, du hast ja hex-zahlen, dann eben strol(mit base=16) anstelle von atoi.
Bashar
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 17742
Beitrag Bashar Mitglied 15:50:19 02.08.2012   Titel:              Zitieren

atoi??? Hier muss überhaupt nichts gewandelt werden. Die Bytes stehen im Big-Endian-Format in dem Array, das ist je nach Plattform entweder schon ein Integer oder kann durch Umordnen zu einem gemacht werden. Letzteres:

C++:
int ergebnis = ARRAY[6] << 24
             | ARRAY[7] << 16
             | ARRAY[8] << 8
             | ARRAY[9];

_________________
OSL♥
wandl0r
Unregistrierter




Beitrag wandl0r Unregistrierter 15:54:44 02.08.2012   Titel:              Zitieren

du hast recht, das sind ja gar keine strings die er da hat.
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 09:33:20 03.08.2012   Titel:              Zitieren

Ja vielen Dank!

Mit der Lösung von Bashar funktioniert es super... und hab auch gleich das Problem eines 2er Komplements gelöst.

Code:
printf("Vielen Dank an Alle!");
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 09:38:48 03.08.2012   Titel:              Zitieren

Mach dich am besten mal schlau, was es mit diesen Bit-Operatoren (Bitshift nach links, bitweises Oder) auf sich hat (wenn nicht schon geschehen). Du sollst ja keinen Code verwenden, den du nicht verstehst.

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 10:06:42 03.08.2012   Titel:              Zitieren

sowas tue ich sogar...

ganz gut erklärt hier:http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/bitshift.html

shiftet es je um 8bits nahc links, da ja ein char arrayfeld 1 byte (2 nibble, weil 2 hex Zeichen) hat und da ich direkt ein int draus mache checkt er das 2er Kmplement, was vorher bei chars logischerweise nicht der Fall war. Also zumindest grob, habe ichs begriffen --> mit den Einzelheiten spiele ich noch rum!
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 16:02:22 04.08.2012   Titel:              Zitieren

Jetzt hab ich ein Strukturen-Problem!

Habe drei cpp und einen Header.

Eins.cpp werden Werte eingegebn und eine Funktion A() aufgerufen.
Header.h enthält ein paar Feste Werte wie int bla=3; und den Prototypen der Funktion A(). Ebenso wird dort das array unsigned char ARRAY[15] deklariert.
Zwei.cpp enthält dann die ganze Funtkion A(), die das ARRAY mit Daten füllt.
Drei.cpp enthält eine Ausgabe für das ARRAY.

Nun bekomme ich Linkerfehler, die mir sagen, dass sämtliche Variablen, die im Header angelet werden, bereits in der drei.obj deklariert wurden. Sobald ich im Header das ARRAY ausklammere bekomm ich nur noch den Fehler, dass eben das ARRAY unbekannt ist (logisch), kommentiere ich eine der andren Variablen aus, bekomme ich den Fehler, das diese Variabel unbekannt ist (logisch) und genau dieselben Linkerfehler mit der .obj! Ich habe keine Schimmer woran das liegt...
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 16:10:18 04.08.2012   Titel:              Zitieren

deklariere
C++:
extern int bla;

in einer *.h datei.
und in einer *.c datei, welche die *.h datei kennt, kannst du die variable mit einem sinnvollen startwert initialisieren, in deinem fall wohl
C++:
bla=3;
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 16:28:33 04.08.2012   Titel:              Zitieren

habe ich probiert... ähnliches/gleiches problem!

Mache ich es genau so, wie du geschrieben hast, kommt die Meldung in der Zwei.cpp, dass die Variable bla keinen Datentyp hat und int angenommen wird... dafür sind die Linkerfehler weg!

Mache ich das extern davor und weise trotzdem Wert im Header zu, kommt wieder der Linkerfehler (halbwegs logisch, nach definiton von extern, die ich erst mal googlen musste)
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 17:03:25 04.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
habe ich probiert... ähnliches/gleiches problem!

dann hast du es falsch probiert.
KalrHeinz schrieb:

Mache ich es genau so, wie du geschrieben hast, kommt die Meldung in der Zwei.cpp, dass die Variable bla keinen Datentyp hat und int angenommen wird... dafür sind die Linkerfehler weg!

klar hat bla nen datentyp, den machst du ja in der *.h datei bekannt.
in Zwei.cpp muss natürlich die *.h datei, in der
C++:
int bla;

steht, mit include eingebunden werden.

KalrHeinz schrieb:

Mache ich das extern davor und weise trotzdem Wert im Header zu, kommt wieder der Linkerfehler (halbwegs logisch, nach definiton von extern, die ich erst mal
googlen musste)

im header wird nix zugewiesen, das machst du in einer *.c datei.

:)
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 17:07:37 04.08.2012   Titel:              Zitieren

edit: extern vergessen.
C++:
//bla.h
#ifndef BLA_H
#define BLA_H
extern int bla;
#endif


C++:
//bla.c
#include "bla.h"
bla = 3;


C++:
//main.c
#include "bla.h"
...
printf("%d", bla);
...


Zitat:
Ausgabe: 3
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 17:08:38 04.08.2012   Titel:   p.s.            Zitieren

vllt. hast du auch die include guards vergessen.
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 17:09:48 04.08.2012   Titel:              Zitieren

ja doch schon so gemacht also:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
//header.h
 
extern int bla;
extern unsigned char ARRAY[15];
 
 
//Zwei.cpp
 
#include "header.h"
 
bla=3;
ARRAY[1]=0x13; //Beispielehaft


und dann kommt bei bla=3 unbekannter Datentyp!
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 17:13:26 04.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
ja doch schon so gemacht also:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
//header.h
 
extern int bla;
extern unsigned char ARRAY[15];
 
 
//Zwei.cpp
 
#include "header.h"
 
bla=3;
ARRAY[1]=0x13; //Beispielehaft


und dann kommt bei bla=3 unbekannter Datentyp!

shit. du hast recht. man muss wohl auch in der *.c datei den datentypen angeben.
also
C++:
// bla.c
#include bla.h
int bla = 3;

sorry!
vllt. waren es die include guards, die du vergessen hast?
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 17:16:08 04.08.2012   Titel:              Zitieren

auch nicht ganz, gebe ich in der cpp nochmal int davor an, gibt er mir den Fehler Doppeldeklaration...

Trotzdem Danke... ich werde morgen nochmal schauen, für heute ist Schicht im Schacht!
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 17:20:53 04.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
auch nicht ganz, gebe ich in der cpp nochmal int davor an, gibt er mir den Fehler Doppeldeklaration...

Trotzdem Danke... ich werde morgen nochmal schauen, für heute ist Schicht im Schacht!

daher die frage nach den include-guards ...
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 17:29:06 04.08.2012   Titel:              Zitieren

nein Header.h ist immer mit
Code:
#include "Header.h"
dabei. Und im header eben
Code:
#pragma once
und dann Variablen...
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 17:33:14 04.08.2012   Titel:              Zitieren

oh, ok.
pragma once als include guard kannte ich noch gar nicht.
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 15:56:00 05.08.2012   Titel:              Zitieren

Funktioniert übrigends immenroch nicht... verstehe es nicht...
keiner Eine Idee? Habe keine 2 gleiche Funktione, keine 2 main oder sowas! in Eins.Cpp wird Funktion aus Zwei.cpp aufgerufen und in zwei.cpp wird eine funktion aus drei.cpp aufgerufen... also auch ablaufreihenfolge ist klar!
Habe nun probiert, die Variablen ganz aus dem Header zu nehmen, weil ein Header für drei cpps, und dann eben die Variablen explizit beim Funktiosnaufruf auch mit zu übergeben, da brachte einen Teilerfolg, aber nicht alle Linkerfehler sind beseitigt!
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 18:34:15 05.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
ja doch schon so gemacht also:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
//header.h
 
extern int bla;
extern unsigned char ARRAY[15];
 
 
//Zwei.cpp
 
#include "header.h"
 
bla=3;
ARRAY[1]=0x13; //Beispielehaft


und dann kommt bei bla=3 unbekannter Datentyp!

Wo steht denn das bla=3 ?
In einer Funktion oder außerhalb ?
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 18:44:21 05.08.2012   Titel:              Zitieren

außerhalb
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17930
Beitrag SeppJ Moderator 18:45:40 05.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
außerhalb
Zuweisungen können nicht außerhalb von Funktionsblöcken stehen.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 18:56:59 05.08.2012   Titel:              Zitieren

seit wann das? Außerhalb ist es eine globale Variable, innerhalb eine für nur diese Funktion!
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 19:11:08 05.08.2012   Titel:              Zitieren

drei dateien sind das? lade doch mal irgendwo hoch das ganze, vllt erbarmt sich ja jemand ...

wieso haben deine dateien eigentlich die endung cpp?
das ist eher ungewöhnlich und manch ein compiler schaltet dann in den c++ modus.
nicht dass es jetzt für dein problem unbedingt relevant sein müsste, nur ne frage am rande ...
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17930
Beitrag SeppJ Moderator 19:56:24 05.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
seit wann das?
Immer schon und das wird auch ewig so bleiben. Wann sollte denn dieser Code ausgeführt werden, wenn er zu keiner Funktion gehört? Du denkst vermutlich gerade an die Definition einer Variablen mit gleichzeitiger Zuweisung.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 20:01:30 05.08.2012   Titel:              Zitieren

weil ich das ganze im Visual Studio 2008 mache und es dort kein wirklich reines C mehr gibt... außerdem nutzte ich auch die << Operatoren usw. also einen schönen Misch-Masch aus beiden!

Hab einen Teil des Fehlers wohl beseitigt, hatte (wie das so oft kommt) ein Strichpunkt vergessen... warum dann Linker Fehler kommen, ist mir fraglich. Jetzt hab ich noch einen Linkerfehler, der mir sagt, ich hätte ein unaufgelöstes Symbol, was wohl nicht mehr das Problem ist, was ich bisher hatte.


Also nochmal Danke für die Hilfe!
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 20:08:00 05.08.2012   Titel:              Zitieren

@SeppJ

nene Beispiel:
Code:
1
2
3
4
5
6
7
8
9
10
11
#include "sonstwas"
 
int a = 3; // globale Variable, die in jeder Funktion dieser Datei verwendet werden kann, oder falls es ein Header ist in jeder Funktion, die den Header kennt
 
int main(void) {
   Funktiona()
   }
 
int Funtkiona {
  a=4; // neuen Wert zuweisen
}


und so mache ich das seit immer eigendlich...
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 20:15:26 05.08.2012   Titel:              Zitieren

Aber in deinem anderen Beispiel war da doch drei Dateien mit Headern.

Dann wäre das doch so:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "was"
 
extern int a; // steht sonst in einem Header
 
a = 3; // Und hier bekommst du deinen Fehler
 
int foo(void) {
   Funktiona()
   }
 
int Funtkionb {
  a=4; // neuen Wert zuweisen
}
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 20:24:28 05.08.2012   Titel:              Zitieren

habe es halt so:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//header.h
#pragma once
 
extern int a = 3;
ARRAY[15];
 
// Eins.cpp
#include "header.h"
 
str = getstring;
a(str);
 
//Zwei.cpp
#include "header.h"
 
a{
if (str==0]
  return;
else
   output(str,a)
}
 
// Drei.cpp
#include "header.h"
 
output{
cout<<a<<ARRAY<<endl;
}
 
//kein realer code, fehlen einige Dinge, nur zur Verständlichkeit!


Und da war wohl der Fehler, dass die Variable a in allen drei .cpps wieder bekannt war und sozusagen neu deklariert wurde... egal ob mit Wert Zuweisung oder Ohne!
Habe also nun die Variable a in der Funktion a angelegt udn explizit an das pout mit übergeben, dann funktionierts! War mir vorher nicht ganz bewusst
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17930
Beitrag SeppJ Moderator 20:31:54 05.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
@SeppJ

nene Beispiel:
Jaja:

SeppJ schrieb:
Du denkst vermutlich gerade an die Definition einer Variablen mit gleichzeitiger Zuweisung.


edit: Du hast noch geantwortet, während ich geantwortet habe. Meine Antwort darauf:
1. Guck dir unbedingt an, was der Unterschied zwischen Deklaration und Definition ist. Das muss man verstehen. Du hast es nicht.
2.
Zitat:
C++:
cout<<a<<ARRAY<<endl;
:eek: Compiliert das? Falls ja, dann stell deinen Compiler mal auf C! Das ist nämlich ein Fetzen C++. C und C++ sind zwei ganz verschiedene Sprachen, nicht mischen!

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List


Zuletzt bearbeitet von SeppJ am 20:35:11 05.08.2012, insgesamt 1-mal bearbeitet
b.b.
Unregistrierter




Beitrag b.b. Unregistrierter 20:47:31 05.08.2012   Titel:              Zitieren

SeppJ schrieb:
C und C++ sind zwei ganz verschiedene Sprachen, nicht mischen!

er mischt aber, hat er ja schon geschrieben.
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 12:29:51 06.08.2012   Titel:              Zitieren

1. ja das compiliert...

2. unter Visual Studio hat man nicht so wirklich die Chance reines C zu verwenden!

3. genau ich mische, wie wohl 75% der Leute, die in C oder C++ programmieren

4. verwende ich einige APIs, wie boost.iso, SQLAPI und TCPDumb, welche allesamt auch eher eine Mischung aus C und C++ nutzen.

5. Das schlimme daran ist, ich weiß, dass es unterschiedlich ist, mache trotzdem den Misch-Masch und das weil:

6. man das im Studium sogar inzwischen so gelernt bekommt! Erst reines C und dann eins nach dem andren C++, was immer auf ein Misch-Masch hinausläuft... ich blicke daher manchmal selbst nicht, was welcher Sprache angehört.
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2689
Beitrag Wutz Mitglied 12:49:19 06.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
1. ja das compiliert...

Naivling. Merkst du nicht, dass das Compilieren allein überhaupt keine Aussage über die Funktionsfähigkeit des ablaufenden Programms macht? Wahrscheinlich liest du noch nicht mal die Compilerwarnungen.

KalrHeinz schrieb:

2. unter Visual Studio hat man nicht so wirklich die Chance reines C zu verwenden!

Schwachsinn. Wenn du keine Ahnung hast, wie du es machen kannst, heißt das noch lange nicht, dass man es nicht kann.

KalrHeinz schrieb:

3. genau ich mische, wie wohl 75% der Leute, die in C oder C++ programmieren

Ja genau, alles Dilettanten. Glauben, weil die Quelldateiendung cpp heißt und sie cin/cout nutzen, sie können C++ Programmieren, und da sie irgendwo gelesen haben, dass C++ eine OOP Sprache ist, glauben sie, sie könnten objektorientiert programmieren.

KalrHeinz schrieb:

4. verwende ich einige APIs, wie boost.iso, SQLAPI und TCPDumb, welche allesamt auch eher eine Mischung aus C und C++ nutzen.

Die boost-Autoren haben die Weisheit auch nicht mit Löffeln gegessen, da gibts auch malloc-Caster, was Schrott ist, da brauchst du dir nichts vormachen (lassen).

KalrHeinz schrieb:

5. Das schlimme daran ist, ich weiß, dass es unterschiedlich ist, mache trotzdem den Misch-Masch und das weil:

Weißt du nicht. Du kennst die Grundlagen und Intentionen von C nicht. Du kennst die Grundlagen und Intentionen von C++ nicht. Du hast keine Erfahrung. Und deshalb kannst du dir überhaupt kein fundiertes Urteil bilden. Reiner Herdentrieb: was die anderen machen, mache ich auch.

KalrHeinz schrieb:

6. man das im Studium sogar inzwischen so gelernt bekommt! Erst reines C und dann eins nach dem andren C++, was immer auf ein Misch-Masch hinausläuft... ich blicke daher manchmal selbst nicht, was welcher Sprache angehört.

Das heißt richtig: "... gelehrt bekommen ...".
Deutsch kannst du auch nicht. Bloß weil irgendjemand Professor/Dozent ist, heißt das noch lange nicht, dass er Praxiserfahrung und Ahnung hat, bei euch Erstsemestern ist diese Naiv-Gläubigkeit aber (leider) weit verbreitet.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler


Zuletzt bearbeitet von Wutz am 13:54:05 06.08.2012, insgesamt 1-mal bearbeitet
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 13:22:11 06.08.2012   Titel:              Zitieren

mit dem falschen Fuß aufgestanden?

zu 1:
Ich lese Compilerwarnungen, bei dem Beispiel werden aber keine ausgegeben!

zu 2.
Dann zeig mal, wie du unter VS eine reines C Programm anlegst? Das möchte ich sehen! Du kannst natürlich nur C schreiebn, okay...

zu 3.
Habe NIE behauptet dass ich C oder C++ kann, sonst würde ich hier nicht fragen! Und in dem Fall ist meine Programmierung Streambasiert und hat Objektorientierung einen feuchten Furz zu tun! Ich sagte nur, ich nutzte Funktionen und Sprachliche Mittel aus beiden!

zu 4.
ja wohl wahr

zu 5.
Richtig, ich bin am Lernen, also kann ich das nicht und weiß auch nicht immer was grade C und ws C++ ist richtig. Aber ein Urteil bilden kann ich mir sowohl, darüber, dass ich einen Mix nutze, denn soviel weiß ich!

zu 6.
Das hat auch nie jemand behauptet, der Prof. war allerdings bei SuSe, falls die bekannt sind... was auch nicht heißt er hat Ahnung, aber zumindest war er da sehr lange.
Übrigends bin ich kein Erstsemester sondern grade mit dem Studium fertig, allerdings habe ich keine Informathik studiert, sondern Elektrotechnik, weswegen ich wohl nur Grundlagen in den Info-Sachen hatte, was ja nicht heißt, dass ich mich da nicht weiter vertiefen kann usw.
Und ja beim schnell schreiben vertue ich mich ab und an im deutschen, wie so viele... aber das nur Rande, hast da schließlich Recht!
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 13:29:07 06.08.2012   Titel:              Zitieren

KalrHeinz schrieb:

2. unter Visual Studio hat man nicht so wirklich die Chance reines C zu verwenden!
.


Doch, kann man natürlich. Methode 1 wäre, einfach seine Dateien mit der Endung .c zu versehen. Außerdem kannst du es auch explizit in den Projekteinstellungen festlegen. Dann nimmt er immer den C-Compiler, egal wie die jeweilige Datei heißt.

EDIT: Zu finden unter C/C++ => Erweitert => Kompilierungsart

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?


Zuletzt bearbeitet von _matze am 13:30:12 06.08.2012, insgesamt 1-mal bearbeitet
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 10645
Beitrag _matze Mitglied 13:31:31 06.08.2012   Titel:              Zitieren

KalrHeinz schrieb:

3. genau ich mische, wie wohl 75% der Leute, die in C oder C++ programmieren
.


Es mag genug Leute geben, die ihren C++-Code mit C vermischen. Aber es gibt eigentlich niemanden (außer dir), der seinen C-Code mit C++ vermischt. :D

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 13:55:53 06.08.2012   Titel:              Zitieren

_matze schrieb:
Aber es gibt eigentlich niemanden (außer dir), der seinen C-Code mit C++ vermischt. :D

Gerade bei MS-VS: C89 mit Zeilenkommentar // :o)
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2689
Beitrag Wutz Mitglied 14:09:53 06.08.2012   Titel:              Zitieren

KalrHeinz schrieb:

zu 2.
Dann zeig mal, wie du unter VS eine reines C Programm anlegst? Das möchte ich sehen! Du kannst natürlich nur C schreiebn, okay...

Das brauche ich nicht zeigen, das habe ich schon mehrfach hier erläutert. Wenn du suchen könntest, hättest du das auch leicht gefunden, z.B. hier:
http://www.c-plusplus.de/forum/p2223327#2223327

KalrHeinz schrieb:

zu 3.
Habe NIE behauptet dass ich C oder C++ kann, sonst würde ich hier nicht fragen! Und in dem Fall ist meine Programmierung Streambasiert und hat Objektorientierung einen feuchten Furz zu tun!

Woher weißt du, wie Objektorientierung in C++ aussieht, wenn du kein C++ "kannst"?
Argumentieren kannst du auch nicht.

KalrHeinz schrieb:

zu 6.
Das hat auch nie jemand behauptet, der Prof. war allerdings bei SuSe, falls die bekannt sind... was auch nicht heißt er hat Ahnung, aber zumindest war er da sehr lange.

Ich lach mit tot. Doch wohl nicht etwa:
http://www.amazon.de/prod ....... Star&showViewpoints=0
Da bist du wohl einer der vielen hundert 'famos ausgebildeten' Studenten.
OK, ich entschuldige mich bei dir. Du kannst ja nichts dafür.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler


Zuletzt bearbeitet von Wutz am 14:12:33 06.08.2012, insgesamt 1-mal bearbeitet
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 14:11:36 06.08.2012   Titel:              Zitieren

Die Dateiendung .c muss man dann aber explizit selber erstellen, wenn man neues File sonstwie dazufügt gibt es diese Option zumindest bei mir nicht.

Aber okay... Ihr habt mit der Vermischung vermutlich recht...

Sei es wie es sei, bin ja immenroch am Lernen! Und immernoch vielen Dank der guten Hilfe!

P.S. gibt es eien gute Seite, mit den Unterschieden C und C++, denn auch die genannten Zeilenkommentare sind in vielen C++ Büchern enthalten, wie z.B. Visual C++ 6 ISBN: 3-8273-1394-5 um nur eines mal genau zu nennen.
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 14:14:10 06.08.2012   Titel:              Zitieren

@Wutz

ich hatte nicht danach gesucht, weil ich nicht suchen wollte, kam ja bisher klar, aber vielen Dank!

Ja genu zu diesen *famosen* Studenten gehöre ich... Du wohl auch? Zumindest muss es ja bekannt sen...
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2689
Beitrag Wutz Mitglied 14:23:48 06.08.2012   Titel:              Zitieren

Nein.
Ich gehöre nicht zu denen. Aber wie gesagt, als Student (an öffentl.Hochschulen) kann man sich seine Lehrer eben nicht aussuchen, da muss man nehmen was kommt.
Aber kritisch hinfragen darf und sollte man trotzdem.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
KalrHeinz
Unregistrierter




Beitrag KalrHeinz Unregistrierter 14:28:26 06.08.2012   Titel:              Zitieren

okay.. also kennst du nur das verlinkte Buch? Ist ja nur eins von vielen...
DirkB
Unregistrierter




Beitrag DirkB Unregistrierter 14:32:34 06.08.2012   Titel:              Zitieren

KalrHeinz schrieb:
P.S. gibt es eien gute Seite, mit den Unterschieden C und C++, denn auch die genannten Zeilenkommentare sind in vielen C++ Büchern enthalten, wie z.B. Visual C++ 6 ISBN: 3-8273-1394-5 um nur eines mal genau zu nennen.

Das hast du falsch verstanden.
Die Zeilenkommentare stammen von C++ und sind dann auch mit C99 im C-Standard eingeführt worden.
Viele Compiler haben das auch vorher schon bei C unterstützt.
Wie eben die Compiler von MS, die im C-Modus immer noch bei C89 stecken (dem über 20 Jahre altem Standard).
c++.de :: C (C89, C99 und C11) ::  Probleme mit Char-Zeigern und arrays   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.