2016-05-08 14 views
-1

Kopieren Ich habe dieses Programm:Fehler eine Zeichenfolge in C

#include <stdio.h> 

void string_copy(char * dst,char * src); 

int main(){ 
    char stringA[] = "Hello"; 
    char stringB[10]; 

    string_copy(stringB,stringA); 

    printf("%s",stringB); 
    return 0; 

} 

void string_copy(char * dst,char * src){ 
    if(src == NULL || dst == NULL) return; 

    while(*src != '\n'){ 
     *dst = *src; 
     dst++; 
     src++; 
    } 
} 

Ich kann nicht verstehen, warum dieser Code nicht funktioniert hat. ich:

Error: the program has stopped working

Wie kann ich lösen?

+1

überprüfen Sie gegen '\ 0' und machen Sie es zu einer Do-While-Schleife (oder schreiben Sie * DST = '\ 0'') am Ende, um sicherzustellen, dass das Ergebnis Null-terminiert ist – ensc

+1

Dies ist eine sehr schön gestellte Frage. Gute Arbeit! – wallyk

Antwort

2

sollten Sie '\0' anstelle von '\n':

Versuchen Sie folgendes:

void string_copy(char * dst,char * src){ 
    if(src == NULL || dst == NULL) return; 

    while(*src != '\0'){ 
     *dst = *src; 
     dst++; 
     src++; 
    } 
    *dst = '\0'; // <-- need to add this 
} 

\0 ist der NULL-Zeichen

\n ist neue Linie char

+0

Danke es funktioniert –

2

Sie sollten while(*src != '\0') schreiben. Zeichenfolgen in C werden mit dem NULL-Zeichen '\ 0', nicht mit dem Zeilenumbruchzeichen '\ n' beendet.

+1

'while (* src! = 0)' ist einfacher und das selbe. Oder sogar 'while (* src)'. – i486

+2

Yeah 'while (* src)' ist natürlich der kürzeste. Aber ich denke, dass es manchmal gut ist, wenn man explizit ist, zumindest jetzt für OP. – coredump

+0

@ i486 Ein expliziter Cast '\ 0' ist viel besser, da er deine Absicht ausdrückt - es ist ein selbstdokumentierender Code. 'while (* src)' ist ein schlechter Stil, da er leicht mit 'while (src)' verwechselt werden kann. – Lundin

0
  1. '\n' in C is known as new line character.

  2. '\0' in C by default signify end of the string.

So in der Schleife while (*src != '\n') anstelle von '\n' verwenden Sie '\0' . Wenn die while-Schleife \0 am Ende der src-Zeichenkette identifiziert, wird sie beendet und zu diesem Zeitpunkt wurde die src-Zeichenkette in die Zeichenkette dst kopiert.

+0

Danke es funktioniert –

+0

Bitte upvote .. –