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
chars1[4];
2
chars2[4];
3
chararray[9];
4
5
array={s1,'/',s2};
Fehlermeldung:
../Test1.c:194: error: expected expression before '{' token
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.
Programmieren ist nicht wie ein Aufsatz schreiben.
Man muss die Syntax und die Funktionen schon genau so benutzen wie sie
definiert und deklariert sind.
Wie das genau geht lernst du in einem C Buch.
Ich schrieb auch:
Kannst du mit strcpy und strcat machen.
Du brauchst beide Funktionen nacheinander.
Und die beiden können nicht mit einzelnen Zeichen umgehen.
Die brauchen Zeiger auf C-Strings (Nullterminierte Zeichenketten)
Kannst mal bei http://de.cppreference.com/w/c/string/byte nachschlagen.
Das ersetzt kein Lehrbuch über C.
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
charbuffer[80]={0};
2
3
strcpy(buffer,"1");// genau ein Zeichen :-)
4
strcat(buffer,"2");// und noch ein Zeichen
aber zum TO
1
chars1[4];
2
chars2[4];
3
chararray[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
Joachim B. schrieb:> komisch ich mache das öfter> char buffer[80] = {0};>> strcpy(buffer, "1"); // genau ein Zeichen :-)> strcat(buffer, "2"); // und noch ein Zeichen
Das sind jeweils zwei Zeichen.. zumindest in C.
Frank M. schrieb:> Dennis S. schrieb:>> Das sind jeweils zwei Zeichen.. zumindest in C.>> Hehe. Wo er recht hat, hat er recht ;-)
das war C nicht ich :-)
und wenn du in ein Array 10x strcat(array, "A"); machst sind trotzdem
nur 10 As hinzugekommen und keine 20 ;-)
Joachim B. schrieb:> Frank M. schrieb:> und wenn du in ein Array 10x strcat(array, "A"); machst sind trotzdem> nur 10 As hinzugekommen und keine 20 ;-)
DAS hat ja auch keiner behauptet.. :-P
A. R. schrieb:> Index9
Ein Array der Größe 9 hat einen gültigen Index von 0 bis 8.
Ein String braucht ein Stringendekennzeichen, das ist das null Byte und
dafür muss in dem Array Platz sein.
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.
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).
Wenn s1 nur 4 Bytes hat, geht das strcpy in die Hose. Strcpy kopiert
solange, bis ein Nullbyte kommt. Das selbe gilt für strcat.
Also muss s1 5 Bytes groß sein. s2 auch.
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.