Reputation: 325
I'm trying to convert some code from C# to C so that it can be burnt onto a microcontroller.
Could someone please tell me how I would convert a two dimensional string array in C# into something in C?
My C# code looks like this:
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"},};
And moreover, how would I access the elements? In C# if I wanted the second element in the third row it would simply be DirectionPosition[2,1] but what is the equivalent of that when there is no string in C much less 2-D string arrays?
Upvotes: 4
Views: 29343
Reputation: 40558
There's a slightly simpler way of doing this without all the extra brackets:
#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;
}
Upvotes: 1
Reputation: 881623
The easiest way to do it is with char pointers as follows:
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"}
};
The element "10" in the first line is referenced as DirectionPosition[0][1]
(zero-based, first index is line, second is column).
Upvotes: 10
Reputation: 881775
I recommend deciding the maximum length of strings and maximum number of strings per row and telling the compiler, e.g.:
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"},};
Now, DirectionPosition[2][1] &c will let you access specific strings in the matrix.
Upvotes: 2
Reputation: 111150
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 has no inbuilt string class, you have to make do with character arrays. You could alternatively use pointers to pointer to char.
Upvotes: 7