Array in Array schreiben

OP #3999462
Hallo,

ich habe 2 Array´s die ich gerne in ein gemeinsames Array schreiben 
möchte, mit einem Sonderzwichen dazwischen.
Was ist bei mir im Quelltext falsch??

1
char s1 [4];
2
char s2 [4];
3
char array[9];
4

5
array = { s1, '/', s2 };



Fehlermeldung:

../Test1.c:194: error: expected expression before '{' token
Gast #3999594
A. R. schrieb:
> Ok,
> bekomm trotzdem eine Fehlermedung:
> ../Test1.c:197: error: too many arguments to function
> 'strcat'strcat(array, s1, s2);

einfach mal in die Doku schauen was strcat als Parameter braucht sollte 
man schon.
#3999785
Dirk B. schrieb:
> Kannst du mit strcpy und strcat machen.
>
> Du brauchst beide Funktionen nacheinander.
>
> Und die beiden können nicht mit einzelnen Zeichen umgehen.

komisch ich mache das öfter
1
char buffer[80] = {0};
2

3
strcpy(buffer, "1"); // genau ein Zeichen :-)
4
strcat(buffer, "2"); // und noch ein Zeichen

aber zum TO
1
char s1 [4];
2
char s2 [4];
3
char array[9];

logisch kannst du

strcpy(array, s1); // machen

aber das arry endet ja mit NULL und wenn du da was anhängst ist dein 
erstes Ende NULL weg, weil es immer nur ein Ende gibt.

nun kannst du ans erste s1 in array einen Trenner anhängen
strcat(array, "/");

und da wieder
strcat(array, s2);

willst du auf s1 zugreifen das liegt ja vorne

&array[0] und endet bei strstr(array, "/");

wo liegt s2? -> Übungsaufgabe
OP #3999861
s1 und s2 kann Werte von 0-9999 (als ascii) annehmen oder halt auch 4 
Buchstaben.


Ich habe jetzt:
1
strcpy ( array, s1);
2
strcat ( array, '/');
3
strcat ( array, s2);


Also sollte im array dann folgendes stehen:
(z.B.: s1 = 1234 und s2=5678)

array = 1234/5678  (Index0 ist 8  und  Index9 ist 1)
Moderator Persönliche Seite #3999924
Joachim B. schrieb:
> und wenn du in ein Array 10x strcat(array, "A"); machst sind trotzdem
> nur 10 As hinzugekommen und keine 20 ;-)

Es sind 10 x A kopiert worden und 10 x '\0', also insgesamt 20 Zeichen 
kopiert worden. Denn strcat terminiert den Ziel-String - was übrigens 
strncat() nur bedingt macht.

P.S.
Man sollte NULL und NUL immer schön auseinanderhalten - gerade wenn man 
etwas einem C-Anfänger erklärt. NUL ist das ASCII-Zeichen '\0', was zur 
Terminierung von Strings benutzt wird (s. auch google: "man ascii").

NULL ist die Zahl 0, welche man oft für einen NULL-Pointer verwendet - 
aber nicht zur Terminierung von Strings - auch wenn beide Ausdrücke den 
gleichen numerischen Wert besitzen.
Gast #4000168
A. R. schrieb:
> Ich habe jetzt:
> strcpy ( array, s1);
> strcat ( array, '/');
> strcat ( array, s2);

Das '/' ist ein Zeichen. Deutlich erkennbar an den Hochkommas. Damit 
kommt strcat nicht zurecht.

A. R. schrieb:
> s1 + / + s2 + "/0" spricht 4+1+4+1 = 10

Das "\0" ist ein Stringliteral. Deutlich erkennbar an den 
Anführungszeichen. Da hängt der Compiler automatisch noch eine '\0' 
dran.

Ja, du brauchst mindestens Platz für 10 Zeichen.

Schließe nicht von dem Verhalten von anderen Hochsprachen auf C.
Schon gar nicht bei Arrays (und somit auch Strings).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.