2009-05-10 13 views
3

私はそれをマイクロコントローラに焼くことができるようにC#からCにいくつかのコードを変換しようとしています。Cで多次元文字配列を初期化する方法は?

誰かがC言語で2次元文字列配列をC言語に変換する方法を教えてください。

私のC#コードは次のようになります。

string[,] DirectionPosition = {{"00", "10", "", "01", ""}, 
             {"01", "11", "", "02", "00"}, 
             {"02", "12", "", "03", "01"}, 
             {"03", "13", "", "04", "02"}, 
             {"04", "14", "", "", "03"}, 
             {"10", "20", "00", "11", ""}, 
             {"11", "21", "01", "12", "10"}, 
             {"12", "22", "02", "13", "11"}, 
             . 
             . 
             . 
             . 
             {"44", "", "34", "", "43"},}; 

しかも、どのように私は要素にアクセスするのでしょうか? C#では、3番目の行に2番目の要素が必要だった場合は、単にDirectionPosition [2,1]になりますが、Cの文字列が2-Dの文字列配列でない場合と同等のものは何ですか?

答えて

7
char DirectionPosition[][ 5 ][ 3 ] = {{"00", "10", "", "01", ""}, 
            {"01", "11", "", "02", "00"}, 
            {"02", "12", "", "03", "01"}, 
            {"03", "13", "", "04", "02"}, 
            {"04", "14", "", "", "03"}, 
            {"10", "20", "00", "11", ""}, 
            {"11", "21", "01", "12", "10"}, 
            {"12", "22", "02", "13", "11"}, 
            . 
            . 
            . 
            . 
            {"44", "", "34", "", "43"},}; 

Cには文字列クラスがありません。文字配列を使用する必要があります。代わりに、charへのポインタへのポインタを使用することもできます。

10

次のようにそれを行うための最も簡単な方法は、文字ポインタである:最初の行における

char *DirectionPosition[9][5] = { 
    {"00", "10", "", "01", "" }, 
    {"01", "11", "", "02", "00"}, 
    {"02", "12", "", "03", "01"}, 
    {"03", "13", "", "04", "02"}, 
    {"04", "14", "", "", "03"}, 
    {"10", "20", "00", "11", "" }, 
    {"11", "21", "01", "12", "10"}, 
    {"12", "22", "02", "13", "11"}, 
    {"44", "", "34", "", "43"} 
}; 

要素「10」DirectionPosition[0][1](ゼロベースの、最初のインデックスはラインであるとして、第二カラムで参照されます)。

+0

なお、あなたはコード内でこれらの文字列を変更することはできません静的な文字列へのポインタを保存しているからです。それらを変更したい場合は、dirkgentlyのコードのように配列の初期化子として使用してください。 – rampion

+0

私は実際にはそれを@rampionと考えましたが、マイクロコントローラーのアスペクトと問題のトーンを考慮して、私はそれを定数テーブルとして扱うというコマンド決定をしました。私は間違っているかもしれませんが、あなたは3d、非ポインタ型のソリューションの1つを使うべきです。 – paxdiablo

+0

私はchar * DirectionPosition [] [5] = {.....}を好むでしょう。 – chmike

2

私は例えば、文字列と行あたりの列数の最大値の最大長を決定し、コンパイラを伝えるお勧めします。今

typedef char string[3]; 
typedef string s5[5]; 

    s5 DirectionPosition[] = {{"00", "10", "", "01", ""}, {"01", "11", "", "02", "00"}, {"02", "12", "", "03", "01"}, {"03", "13", "", "04", "02"}, {"04", "14", "", "", "03"}, {"10", "20", "00", "11", ""}, {"11", "21", "01", "12", "10"}, {"12", "22", "02", "13", "11"}, {"44", "", "34", "", "43"},}; 

、DirectionPositionは、[2] [1] & Cを使用して、特定の文字列にアクセスできるようになりますマトリックス内にある。

1

は、すべての余分な括弧なしでこれを行うための少し簡単な方法があります:

#include <stdio.h> 

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

char DirectionPosition[][ 5 ][ 3 ] = {"00", "10", "", "01", "", 
            "01", "11", "", "02", "00", 
            "02", "12", "", "03", "01", 
            "03", "13", "", "04", "02", 
            "04", "14", "", "", "03", 
            "10", "20", "00", "11", "", 
            "11", "21", "01", "12", "10", 
            "12", "22", "02", "13", "11", 
            "44", "", "34", "", "43"}; 

    printf("dp[1][1] == %s\n", DirectionPosition[1][1]); 
    printf("dp[1][2] == %s\n", DirectionPosition[1][2]); 
    printf("dp[1][3] == %s\n", DirectionPosition[1][3]); 

    return; 
} 
+0

Yeesh。私は読みやすさのために余分な括弧を使います。コンパイラは、どのエントリがどこに行くのかを簡単に把握できるかもしれませんが、私も同様にできるようにしたいと思います:) – rampion

関連する問題