| Autor |
Nachricht |
KalrHeinz
Unregistrierter
|
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
|
_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
|
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
|
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
|
_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
|
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
|
_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
|
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
|
_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
|
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
|
C++ Forumbot Forumbot
15:20:49 02.08.2012 Titel: |
|
Zitieren |
|
 |
wandl0r
Unregistrierter
|
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
|
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
|
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
|
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
|
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
|
_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
|
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
|
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
|
b.b. Unregistrierter
16:10:18 04.08.2012 Titel: |
|
Zitieren |
deklariere
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 |
|
|
|
 |
KalrHeinz
Unregistrierter
|
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
|
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
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
|
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);
... | |
|
|
|
|
 |
b.b.
Unregistrierter
|
b.b. Unregistrierter
17:08:38 04.08.2012 Titel: |
p.s. |
Zitieren |
vllt. hast du auch die include guards vergessen. |
|
|
|
 |
KalrHeinz
Unregistrierter
|
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
|
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
|
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
|
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
|
KalrHeinz Unregistrierter
17:29:06 04.08.2012 Titel: |
|
Zitieren |
nein Header.h ist immer mit dabei. Und im header eben und dann Variablen... |
|
|
|
 |
b.b.
Unregistrierter
|
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
|
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
|
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
|
KalrHeinz Unregistrierter
18:44:21 05.08.2012 Titel: |
|
Zitieren |
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17930
|
SeppJ Moderator
18:45:40 05.08.2012 Titel: |
|
Zitieren |
|
 |
KalrHeinz
Unregistrierter
|
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
|
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
|
SeppJ Moderator
19:56:24 05.08.2012 Titel: |
|
Zitieren |
|
 |
KalrHeinz
Unregistrierter
|
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
|
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
|
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
|
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
|
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; | |
| 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
|
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
|
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
|
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
|
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
|
_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
|
_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. |
_________________ Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
|
|
 |
DirkB
Unregistrierter
|
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.  |
Gerade bei MS-VS: C89 mit Zeilenkommentar // |
|
|
|
 |
Wutz
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2689
|
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
|
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
|
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
|
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
|
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
|
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). |
|
|
|
 |