2016-07-14 16 views
0

strcpyが失敗する理由を教えてください。 値str1を str2の要素の1つにコピーしようとしています。strcpy Cプログラムをクラッシュする

#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

後に割り当てられたメモリを解放するために覚えて働くだろう。それをしないでください。ポインタについての良い本が良い考えです。いずれにしても、これらの文字列はリテラル文字列です.Googleはあなたの親友です。 – Michi

+0

ところで* str2 []は配列ではなく、ポインタの配列です。 – Michi

+1

文字列の配列を作成する方法を理解するには、[this post](http://stackoverflow.com/questions/1088622/how-do-i-create-an-array-of-strings-in-c)を参照してください。 – iRove

答えて

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

""が面倒{'a','b'...'\0'}の代替であるこのコンテキストで間違っています。

あなたは読み取り専用のハードへの書き込みしようとしているため、どちらか

char str1[]="cat"; 

または

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

その後もあなたのコードは

strcpy(str2[0],str1); 

を働かないでくださいコード化メモリ

として[ @michi ]がコメントに記載されています。

しかし、以下

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

はまた、あなたが読み取り専用のハードコーディングされたメモリへの書き込みをしようとしている使用

free(str2[0]); 
+2

これはOPの問題に役立ちますか? – Michi

+0

@Michi:更新しました。オペラの用語が良いことを推測し、彼らは良い本が必要だと確信してください – sjsam

+1

ありがとう。 宣言をstr2 [2] [20]に変更すると、その宣言を編集できます。 私は関数のパラメータとしてstr2を作成し、各要素をインデックスで参照する方法を考えています。 –

関連する問題