strcat Problem
-
warum geht nicht?
int test(char *s_buffer1, char *s_buffer2){ strcat(s_buffer1,"\n"); strcat(s_buffer2,"\n"); printf("%s",s_buffer1); printf("%s",s_buffer2); getchar(); return 0; } int main(){ int test("hallo","ne"); return 0; }
aber das hier funktioniert:
int test(char *s_buffer1, char *s_buffer2){ strcat(s_buffer1,"\n"); strcat(s_buffer2,"\n"); printf("%s",s_buffer1); printf("%s",s_buffer2); getchar(); return 0; } int main(){ char test1[20]; char test2[20]; sprintf(test1,"hallo"); sprintf(test2,"ne"); int test(&test1[0], &test2[0]); return 0; }
ich übergebe doch in beiden Fällen ein char array?
es muss aber an dem strcat liegen, denn im Fall vonint test(char *s_buffer1, char *s_buffer2){ //strcat(s_buffer1,"\n"); //strcat(s_buffer2,"\n"); printf("%s",s_buffer1); printf("%s",s_buffer2); getchar(); return 0; } int main(){ int test("hallo","ne"); return 0; }
gibt es kein Problem...
thx schon mal für eure Hilfe
mit freundlichen Grüßen
-
sry... das int vor test("hallo","ne"); kommt natürlich weg
-
Du kannst nur in Speicher rumschreiben, der dir gehört - Stringliterale zählen nicht dazu. Du könntest beispielsweise auch nicht einfach schreiben
char *p; *p = 'a'; // KAWUMM!
Derartige Dinge erzeugen undefiniertes Verhalten, beispielsweise Segfaults.
Mit
char test[20];
fordert du 20 chars an Speicher an, mit denen du machen kannst, wozu du lustig bist. Du musst aber vorsichtig sein, dass du nicht über diese Grenze hinausschreibst. Beispielsweise ist
char test[] = "hallo"; strcat(test, "\n"); // KAWUMM!
ein Fehler, weil du nur so viel Speicher angefordert hast, dass "hallo" gerade hineinpasst. Aus diesem Grund solltest du, wenn du eine Fuktion in einen Buffer schreiben lässt, auch dessen Länge mit übergeben und beachten, etwa
#include <stddef.h> #include <stdio.h> #include <string.h> void append_world(char *buf, size_t n) { /* Hänge ", world." an den String an, aber höchstens * so viele Zeichen, wie noch im Buffer Platz haben. */ strncat(buf, ", world.", n - strlen(buf) - 1); } int main(void) { char hello[100] = "Hello"; // Dick Platz char hello2[10] = "Hello"; // zu kurz append_world(hello, 100); append_world(hello2, 10); puts(hello); puts(hello2); return 0; } /* Ausgabe: * * Hello, world. * Hello, wo */
-
hey top Sache und das noch um diese Uhrzeit
da ich in der main umbedingt eine Form von test("blah1","blah2"); haben möchte.
muss ich also wohl extra ein array definieren?int test(char *s_buffer1, char *s_buffer2){ char s_test1[20]; char s_test2[20]; sprintf(s_test1,"%s\n",s_buffer1); sprintf(s_test2,"%s\n",s_buffer2); printf("%s",s_buffer1); printf("%s",s_buffer2); getchar(); return 0; } int main(){ int test("blah1","blah2"); return 0; }
thx nochmal für deine schnelle Hilfe
dachte nur, dass ich mir die extra arrays sparen kann...^^
-
Naja, speziell für diesen Fall könntest du auch einfach
printf("%s\n", s_buffer1);
bzw.
puts(s_buffer1),
schreiben. Wenn du aber in einem String rumschreiben willst, brauchst du dafür einen Buffer.
-
ja^^
Das war nur ein Beispiel, in meinem quellcode muss
ich aus einer .txt die Strings zwischen zwei
Stichwörtern ausgeben, also z.B.testanfang
blaaaaaaaaaaah blaaaaaaah
blaaaaaaaaaaah blaaaaaaah
blaaaaaaaaaaah blaaaaaaah
blaaaaaaaaaaah blaaaaaaah
testendeund dazu muss bei strcmp(buffer,array) im array ein '\n' am Ende stehen^^
-
Übergib halt "testanfang\n" bzw. "testende\n".
-
das ist aber so unschön
-
woot? schrieb:
das ist aber so unschön
Wie suchst du dann nach dem Text zwischen Stichwörtern, die nicht mit einem Umbruch enden?
-
Zu dem Programm gibt es eine text.dll in der sämtliche
Texte enthalten sindz.B. loadtext("Menüanfang","Menüende");
Menüanfang
------------------------
(1) Laden
(2) Speichern
(3) Bearbeiten
(4) Beenden
------------------------
Menüendeloadtext ("Menüenglish","Menüenglishend");
Menüenglish
------------------------
(1) Load
(2) Save
(3) Change
(4) Quit
------------------------
Menüenglishendloadtext ("error04start","error04end");
error04start
Die zu ladende Datei konnte nicht gefunden werden.
Möchten sie eine Datei mit genannten Namen erstellen (JA)/(Nein):
error04endso vom Prinzip^^
noch mal Danke für eure Hilfe