2016-07-14 13 views
0

Bitte sagen Sie mir, warum strcpy fehlschlägt. Ich versuche, den Wert str1 in eins des Elements von str2 zu kopieren.strcpy Crashes C Programm

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 

    char str1[]={"cat"}; //string 
    char *str2[]={"mouse","dog"}; //array 
    strcpy(str2[0],str1);  

    return 0; 
} 
+1

Sie versuchen, in einem schreibgeschützten hart codierte Speicher zu schreiben. Tu es nicht. Ein gutes Buch über Zeiger ist eine gute Idee. Wie auch immer diese Zeichenfolgen stringent sind Google ist dein bester Freund. – Michi

+0

Übrigens ist * str2 [] kein Array, sondern ein Array von Zeigern. – Michi

+1

Siehe [diesen Beitrag] (http://stackoverflow.com/questions/1088622/how-do-i-create-an-array-of-strings-in-c) zum besseren Verständnis, wie man ein Array von Strings erstellt. – iRove

Antwort

1
char str1[]={"cat"}; //string 

ist falsch in diesem Zusammenhang

"" ist ein Ersatz für langweilige {'a','b'...'\0'}.

Sie entweder

char str1[]="cat"; 

oder

char str1[]={'c','a','t','\0'}; 

Selbst dann würde Ihr Code

strcpy(str2[0],str1); 

nicht arbeiten, weil Sie in einem Read-Only zu schreiben versuchen, hart codierter Speicher

als [ @michi ] in seinem Kommentar erwähnt.

Aber unten funktionieren würde

str2[0]=malloc(sizeof(str1)); // You allocate memory for str2[0]; 
strcpy(str2[0],str1); 
printf("str2[0] : %s\n",str2[0]) 

Denken Sie auch an den zugewiesenen Speicher nach

Nutzung frei
free(str2[0]); 
+2

Das hilft dem OP-Problem? – Michi

+0

@Michi: Aktualisiert. Schätze, die OP muss gut mit der Terminologie umgehen und sicher, dass sie ein gutes Buch brauchen – sjsam

+1

danke. Wenn Sie die Deklaration in str2 [2] [20] ändern, ist sie editierbar. Ich frage mich nur, wie man str2 als Parameter einer Funktion machen und jedes Element nach Index referenzieren kann; –