2016-03-29 3 views
0

Ich versuche, eine Zeichenfolge Append-Funktion mit Hilfe von Zeigern neu zu schreiben. Meine String Append-Funktion, die nicht explizit Zeiger verwendet, sieht etwa so aus:Anfügen einer Zeichenfolge von der Quelle zum Ziel mit Hilfe von Zeigern

void append_a_string(char a[], b[]) { 
    int i, j; 
    j = length of string a; 
    while (b[i]) { 
     a[i] = b[i] 
      i++; 
     j++; 
    } 
    b[j] = 0; 
} 

Wo ich die Länge der Zeichenfolge nehmen „a“ mit einer vorgefertigten-Funktion. Ich bin verwirrt, genau wie man Zeiger in dieser Situation benutzt. Das ist, was ich habe, so weit:

void append_a_string(char *a, char *b) { 
    a = length of string a; 
    while (b) { 
     b = a; 
     a++; 
     b++; 
    } 
    b = 0; 
} 
+0

Sie beide verwenden Zeiger. 'char a []' ist nur eine andere Art, 'char * a' zu sagen (aber IANALL). –

+0

Ja ich verstehe. Ich versuche jedoch, den Code so zu schreiben, dass ich explizit Zeiger verwende, anstatt sie implizit über Zeichenarrays zu verwenden. – zzzOp

Antwort

0

Dies ist, wie Ihr Code sein sollte:

void append_a_string(char *a, char *b) { 
    a += length of string a; 
    while (*b) { 
     *a = *b; 
     a++; 
     b++; 
     } 
    *a = 0; 
} 

Sie die Funktionen in string.h verwenden können:

#include<string.h> 
strcpy(a+length_of_string_a, b); //if you know the length of a 
strcat(a, b); //if you don't know the length of a 
+0

Danke für die Antwort! Warum fügen Sie die Länge der Zeichenfolge in a hinzu, anstatt sie zuzuweisen? Zweitens, warum gibt es keine äquivalente Aussage zu b [j] = 0? – zzzOp

+0

Sie möchten 'b' an' a' anhängen. 'a + length_of_string_a' ist das Ende von' a'. Wenn Sie "b" an das Ende von "a" kopieren, wird "b" an "a" angehängt. Sie sollten das letzte Byte von "a" auf 0 setzen, nicht das letzte Byte von "b". – v7d8dpo4

1

Hier ist die verfeinerter Code:

void append_a_string(char *a, char *b) { 
    a += strlen(a); 
    while (*b) { 
     *a++ = *b++; 
    } 
    *a = '\0'; 
} 

Es ist a erfordert ein Null-Terminal, anstatt b.

+0

Danke für die Antwort! Ich verstehe es jetzt!! – zzzOp

+0

@zzzOp Sie können diese Antwort annehmen und/oder upvotieren, wenn Sie glauben, dass sie Ihr Problem löst :) –

+0

meinst du, während (* b) stattdessen? , kann while sein (* a ++ = * b ++); –