2017-07-27 4 views
-5

私はポインタについて学んでいます。このコードは実行時エラーを生成しています。 charへのポインタを使用してchar配列に文字列を挿入しようとしています。Strcpy関数がポインタへのポインタで機能しないのはなぜですか?

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char *a[10]; 
    strcpy(*a,"foo"); 
} 
+5

に使用されていますか? –

+1

そのコードをコンパイルしている間、あなたのコンパイル時の叫び声はありませんか?あなたはそれに耳を傾けるべきです。 – Gerhardh

答えて

1

のchar * [10]はcharへのポインタの配列としてである、あなたはあなたがcharに10個のポインタの配列としてaを宣言した文字

2

の配列である[10] char型欲しいです。 あなたは10文字の配列を宣言することを意味すると思います。

char a[10]; 

また、あなたがstrcpyへの呼び出しを変更する必要が意味するであろう宣言を変更:

strcpy(a,"foo"); 

プログラムは次のようになります。

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[10]; 
    strcpy(a,"foo"); 
} 
2

strcpyの機能がないのはなぜ配列へのポインタを使って作業していますか?

この宣言

char *a[10]; 

は配列へのポインタを宣言しません。 char型のオブジェクトに対する10個のポインタの配列の宣言です。

さらに、この配列は初期化されておらず、その要素には不確定な値があります。あなたは

char (*a)[10]; 

を書く必要がありますそして、あなたは機能strcpyでそれを使用しようとしている場合は、ポインタは、適切な配列のアドレスで初期化されなければならないchar[10]型の配列へのポインタを宣言する

次のような意味があるようです。

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

int main(void) 
{ 
    char s[10]; 
    char (*a)[10] = &s; 

    strcpy(*a, "foo"); 

    puts(s); 

    return 0; 
} 

プログラム出力が実際にタイプchar[10]

char (*a)[10] = &s; 

の文字配列へのポインタを宣言され、ポインタはアドレスによって初期化されたこのプログラムで

foo 

ですアレイs

そして間接参照ポインタはポインタ `A`にメモリを割り当てるためのコードがある機能strcpy

strcpy(*a, "foo"); 
関連する問題