C-Pointer Problem Der Verkettung Von Zeichenfolgen
Gehe ich durch ein paar übungen und versuche zum verketten von zwei strings mit nur Zeiger (keine char-arrays).
Mein code scheint zu kompilieren(Hinweis: ich bin mit der alten 16-bit-Open Watcom-compiler):
#include <stdio.h>
int main(){
char *str1 = "first";
char *str2 =" second";
strcat2(str1,str2);
for(;*str1!='\0';str1++){
printf(str1);
}
return 0;
}
int strcat2(char *s,char *t){
for(;*s!='\0';s++){
;
}
while((*s++ = *t++)!='\0'){
;
}
*t++;
t='\0';
return 0;
}
Wenn ich versuchte zu laufen, es passiert nichts.
Ich bin sicher, dass meine oben genannten arbeiten ist schrecklich fehlerhaft. Rat und Hilfe wird sehr geschätzt.
- Tipp: wo ist der Raum zu concat zu?
Du musst angemeldet sein, um einen Kommentar abzugeben.
den
str1
undstr2
Sie erklärt haben, sind string-Literale, die nicht bearbeitet werden können. In ausführbare linux-Dateien, den Inhalt der Adresse, die derstr1
undstr2
Punkte sind gespeichert in.rodata
Abschnitt der ausführbaren Datei, die ist nicht beschreibbar. In anderen ausführbaren Dateien, die die Inhalte gespeichert sind, die in einer ähnlichen Lage, die ist nicht beschreibbar. Sollte ein array oder dynamisch reservierten Speicherbereich, diese Arbeit zu tun. Stellen Sie sicher, dass bei der Verkettung der Zeichenfolge, die Sie einfügen wollten, die andere saite hat genug Platz, um beide von Ihnen.EDIT1:
Entweder
oder
n
jeder dann die Verkettung wäre atmost2n
so zu halten, sollten Sie die Bereitstellung von2n
Größe.Dein code wird nicht funktionieren. Zu pedantisch ruft es Undefiniertes Verhalten, weil Sie versuchen, ändern Sie den Inhalt von einem string-literal.
str1
Punkte auf die "erste", welche sich in const Speicher-Speicherort.Statt, um einen Zeiger auf das string-literal, sollten Sie ein array von Zeichen mit ausreichender Kapazität, so halten Sie die verkettete Zeichenfolge
"firstsecond"
Dies funktioniert wie pro Erwartungen
Online-demo hier
Zitat von man:strcat:
Ihre Ziel-string ist nicht groß genug.
Müssen Sie eine beschreibbare und ausreichend großen Puffer zu schreiben, wie diese