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 | |
2 | |
3 | |
4 | |
5 | |
Fehlermeldung:
../Test1.c:194: error: expected expression before '{' token
|
Anzeige
|
Array in Array schreibenHallo, 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??
Fehlermeldung:
../Test1.c:194: error: expected expression before '{' token
C-Grundlagen: Arrays C-Grundlagen: Strings Kannst du mit strcpy und strcat machen. Ok, bekomm trotzdem eine Fehlermedung: ../Test1.c:197: error: too many arguments to function 'strcat'
Include DAtei ist auch drin: #include <string.h>
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. 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
aber zum TO
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. Dennis S. schrieb: > Das sind jeweils zwei Zeichen.. zumindest in C. Hehe. Wo er recht hat, hat er recht ;-) 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 ;-) s1 und s2 kann Werte von 0-9999 (als ascii) annehmen oder halt auch 4 Buchstaben. Ich habe jetzt:
Also sollte im array dann folgendes stehen: (z.B.: s1 = 1234 und s2=5678) array = 1234/5678 (Index0 ist 8 und Index9 ist 1) 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. Index9 war ein schreibfehler. Sollte Index8 sein. Also sollte die Variable wo ich mein s1, / und s2 reinschreibe so groß wie folgt sein?? s1 + / + s2 + "/0" spricht 4+1+4+1 = 10
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). 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.
Gast
#4000213
Alles hat ein Ende nur die Wurst hat zwei ;-) Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|