Array in Array schreiben

#3999462
Lesenswert?

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
#3999785
Lesenswert?

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
Moderator Persönliche Seite #3999924
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren