Forum: PC-Programmierung C++ Char zuweisen


von Tobi T. (freitagvormittag)


Lesenswert?

Hallo zusammen,

vermutlich sehe ich den Wald vor lauter Bäumen nicht, aber ich habe ein 
Problem...

Eigentlich möchte ich nur zwei Zeichen einem char Array zuweisen:
1
char Buffer5[3]         // Da sollen die Zeichen rein
2
char sInbuffer2[2000]   // Da stehen die Zeichen drin
3
char *pSin2in           // Zeigt über 5 Umwege auf sInbuffer2

Die ersten beiden Zeichen von sInbuffer2 sollen nun in Buffer5.

1. Versuch
1
Buffer5[0] = sInbuffer2[0];
2
Buffer5[1] = sInbuffer2[1];
--> Buffer5 bleibt leer (/0/0/0)

2. Versuch
1
Buffer5[0] = (char) *pSin2in;
2
Buffer5[1] = (char) *(pSin2in+1);
--> Buffer5 bleibt leer (/0/0/0)

3. Versuch
1
strncpy(Buffer5, sInbuffer2, 2);
--> Buffer5 bleibt leer (/0/0/0)

Was mache ich nur falsch???

Danke, Tobi

von radiostar (Gast)


Lesenswert?

in sInbuffer2[] steht nix drin...

von radiostar (Gast)


Lesenswert?

Nachtrag: wo sind die Strichpunke bei den Deklarationen?

von Tobi T. (freitagvormittag)


Lesenswert?

zumindest der Debugger behauptet, es stüde etwas drin...
1
sInbuffer2 = "4F7ED4004C08\r\n"
Und die Strichpunkte sind da wo sie hingehören, ist schließlich 
übersetzbar
1
char Buffer5[3];         // Da sollen die Zeichen rein
2
char sInbuffer2[2000];   // Da stehen die Zeichen drin
3
char *pSin2in;           // Zeigt über 5 Umwege auf sInbuffer2

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Tobi Tobi schrieb:
> zumindest der Debugger behauptet, es stüde etwas drin...

Dann zeig mal deinen Code komplett

von Tobi T. (freitagvormittag)


Lesenswert?

Komplett ist leider etwas schwierig, ist ein fertiges Programm mit >2000 
Zeilen, an dem ich "nur eine Kleinigkeit" ändern wollte.

1
char Buffer5[3];         // Da sollen die Zeichen rein
war im Header deklariert.
Ich habe es dort gelöscht und lokal deklariert. Der Rest blieb wie in 
Versuch 3.
Jetzt geht es. Aber warum ist mir immer noch nicht klar...

von Karl H. (kbuchegg)


Lesenswert?

Tobi Tobi schrieb:

> Ich habe es dort gelöscht und lokal deklariert.

Das könnte schon der Grund gewesen sein :-)
Du hattest 2 derartige Arrays im System.

Ins Header File kommen keine Definitionen von globalen Variablen! Und 
modullokale Variablen haben im Header File schon gleich gar nichts 
verloren.


xxx.h
1
extern char Buffer[3];   // es gibt eine globale Variable.
2
                         // Sie wird nicht hier vereinbart, aber es gibt sie
3
4
void InitXXX( void );

xxx.c
1
#include "xxx.h"
2
3
char Buffer[3];    // hier ist die globale Variable
4
5
static char Buff[8];  // diese 'globale' Variable ist nur für Funktionen innerhalb
6
                      // von xxx.c sichtbar. Von aussen gibt es keinen Zugriff
7
                      // darauf
8
9
void InitXXX()
10
{
11
  Buffer[0] = 'a';
12
  Buff[0] = 'b';
13
}

yyy.c
1
#include "xxx.h"
2
3
int main()
4
{
5
  InitXXX();
6
7
  printf( "%c\n", Buffer[0] );
8
}

: Bearbeitet durch User
von Tobi T. (freitagvormittag)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Das könnte schon der Grund gewesen sein :-)
> Du hattest 2 derartige Arrays im System.
>
> Ins Header File kommen keine Definitionen von globalen Variablen! Und
> modullokale Variablen haben im Header File schon gleich gar nichts
> verloren.

Dann werde ich wohl jetzt etwas besser darauf achten, wo meine Variablen 
liegen.

Aber so ganz versteh ich es immer noch nicht.

Wenn meine Variable nur 1x angelegt ist, dann sollte es doch egal sein, 
ob im Header oder einem der C-Files.

: Bearbeitet durch User
von Lutz H. (luhe)


Lesenswert?

Wenn jemand die  Variablen  nach 5 Monaten in Einem der 2567 HeaderFiles 
suchen soll,in dem der Name dann 35 mal vorkommt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tobi Tobi schrieb:
> Wenn meine Variable nur 1x angelegt ist, dann sollte es doch egal sein,
> ob im Header oder einem der C-Files.

Sobald sie im Header "angelegt" ist, ist sie nicht mehr nur 1x angelegt, 
sondern so oft, wie die Headerdatei von einem C-File eingebunden wird.

von Tobi T. (freitagvormittag)


Lesenswert?

Rufus Τ. Firefly schrieb:

> Sobald sie im Header "angelegt" ist, ist sie nicht mehr nur 1x angelegt,
> sondern so oft, wie die Headerdatei von einem C-File eingebunden wird.

Das macht Sinn... Dann ist auch das komische Verhalten klar.

Vielen Dank für eure Hilfe, Rufus und Karl Heinz
Gruß Tobi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.