0

プログラムは、入力に応じて文字列を作成する必要があります。これらの文字列をリストに追加したいと思います。リストは、関数にポインターとして (他の char * ポインターへ) 渡されます。コードは次のようになります。

void main(void) {
    //set angles alpha (small) & beta (large)
    char ** configurations = calloc(0, sizeof(char*));
    int multiplicity = 0;

    createConfigString(4, 4, 0, configurations, 0, &multiplicity);
}

void createConfigString(int a, int b, int c, char ** configurations, int start, int * multiplicity) {
int x, i;
int strSize = 2 * (a + b + c);

for(x = a; x >= (a + (a % 2)) / 2; x--) {
    //new entry to configurations if starting a new line
    if(start == 0) {
        configurations = realloc(configurations, (*multiplicity + 1) * sizeof(char *));
        configurations[*multiplicity] = calloc(strSize, sizeof(char));
    }
    for(i = 0; i < x; i++) {
        configurations[*multiplicity][start] = "a,";
    }
    if(b == 2) {
        *multiplicity++;
        configurations[*multiplicity][start + 2 * x] = "b,b\n";
        start = 0;
        continue;
    }
    configurations[*multiplicity][start + 2 * x] = "b,b,";
    createConfigString(a - x, b - 2, c, configurations, start + 2 * x + 4, multiplicity);
}
}

しかし、コンパイル時に、行でポインターを int にキャストしようとしていることがわかります

configurations[*multiplicity][start] = "a,";
configurations[*multiplicity][start + 2 * x] = "b,b\n";
configurations[*multiplicity][start + 2 * x] = "b,b,";

私たちが書くとき

configurations[*multiplicity][start] = (int) "a,";

など、警告なしでコンパイルします

私たちは何を間違っていますか?ありがとう

4

2 に答える 2

2

を使用して文字列をコピーすることはできません。=標準関数などの関数を使用する必要がありstrcpyます。

そう:

    configurations[*multiplicity][start] = "a,";

次のようにする必要があります。

    strcpy(configurations[*multiplicity][start], "a,");

そして、他の場所でも同じタイプのパターン。

于 2013-06-05T14:12:04.483 に答える