1

これが私のコードです:

void doSomething(){
    char arr[5][10];
    arr[1] = "Bob";
    arr[2] = "Steve";
    arr[3] = "Tim";
    arr[4] = "Ruth";
    arr[5] = "Heather";
    init(arr);

void init(char *array){
    int i;
    newArr[5][10];
    for(i=0; i<5; i++){
        newArr[i] = *(array + i);
    }
}

次のようなエラーが表示され続けます。

警告: 互換性のないポインター型から 'init' の引数 1 を渡しています [デフォルトで有効] 注: 'char ' が予期されますが、引数の型は 'char ( )[10]' です</p>

4

3 に答える 3

4

データは 2 次元配列であるため、関数はこれを考慮してポインターの配列を取る必要があります (つまりchar (*array)[10]、 またはchar array[][10])。

また、init 関数では、文字列を配列にコピーするだけではなく、すべてのデータをコピーする必要があります (文字列として、strcpyまたは 2 番目のループで文字ごとに)、文字列へのポインターをコピーするだけです (したがって、newArr変数を aにしますchar *newArr[5])。

これがどれも意味をなさない場合は、おそらくこのトピックに関する C FAQ を読んで、C ポインターの知識をブラッシュアップする必要があります。

于 2012-10-24T19:47:09.093 に答える
2

1)Cの使用には文字配列の割り当てはなくstrcpy()、配列は1ではなく0から始まります。

#include <string.h>
void doSomething(){
    char arr[5][10];
    strcpy(arr[0], "Bob");
    strcpy(arr[1], "Steve");
    strcpy(arr[2], "Tim");
    strcpy(arr[3], "Ruth");
    strcpy(arr[4], "Heather");
    init(arr);
}

2)init()char配列へのポインタを取ります。newArr[][]宣言されていない場合は、を追加しcharます。init()ソースの先頭にの宣言を追加します。最後になりましたが、割り当てを。に置き換えてstrcpy()ください。

void init(char (*array)[10]);

void doSomething() {...}

void init(char (*array)[10]){
    int i;
    char newArr[5][10];
    for(i=0; i<5; i++){
        strcpy(newArr[i], array[i]);
    }
}

最後に、退屈かもしれませんが、https://stackoverflow.com/tags/c/infoC FAQを見て、本を手に入れてください。これは私ができるよりはるかに良くそして長くあなたに役立つでしょう。

于 2012-10-24T19:50:53.340 に答える
-1

これはエラーではありません。そのaa警告。ご覧のとおりarr、doSomething は double 配列 (double ポインターを使用して表すことができます) ですが、init では 1 つのポインターしか取りません。それをダブルポインター**arrayまたはarray[][]*

于 2012-10-24T19:45:31.310 に答える