Как написать строку в двумерный массив в C?

Могу ли я узнать, как написать строку символов в массив двумерных символов? Мне нужно прочитать каждый символ в строке и поместить его в 2D-массив.

Например:

char string [10];

Я хочу записать все символы в строке в 2D-массив.

Это означает, что когда я читаю массив [0] [0], я должен получить первый символ.

Обновить:

предположим, что моя строка «GOODMORN», тогда 2D-массив должен выглядеть так.

0|1|2|3 0 G|O|O|D 1 M|O|R|N 

Во-первых, убедитесь, что array[0] достаточно велик, чтобы удерживать строку. Во-вторых, используйте memcpy или strncpy для копирования байтов string в array[0] .

Если вам нужно обрабатывать и обрабатывать каждый символ по отдельности, вы можете начать с того, что делает memcpy, но в цикле for:

 #define NUM_ARRAYS 2 #define LENGTH 4 char *string = "GOODMORN"; for (arr = 0; arr < NUM_ARRAYS; arr++) { for (idx = 0; idx < LENGTH; idx++) { array[arr][idx] = string[idx + (arr * LENGTH)]; } } 

Образец программы, которую я только что написал для вас, чтобы поиграть и посмотреть, действительно ли это то, что вы хотите. Важная часть – это то, где петли входят в игру, деля строку символов по характеру.

Существует много улучшений, которые можно сделать (strncpy, динамическая переменная, MEMORY FREES и т. Д.), Но это зависит от вас.

Изменить: модификация strncpy была просто загружена резиновыми сапогами.

 int main() { char A[12] = "Hello World", **B; int B_LEN = strlen(A) / 2 + 1; B = (char**)malloc(2 * sizeof(char*)); B[0] = (char*)malloc(B_LEN * sizeof(char)); B[1] = (char*)malloc(B_LEN * sizeof(char)); int i, j; for (i = 0; i < 2; i++) { for (j = 0; j < B_LEN; j++) { B[i][j] = A[B_LEN * i + j]; } B[i][j] = '\0'; } printf("%s", B[0]); printf("[END]\n"); printf("%s\n", B[1]); printf("[END]\n"); return 0; } 

Obs: Выход должен быть похож на

Привет [END]
Мир [END]

Тег должен показать вам, что есть пробелы, т. Е. Где именно произошло деление.

Отказ от ответственности: я не совсем понял, о чем идет речь 😉

вы можете просто скопировать строку в место, на которое указывает константа массива для 2D-массива:

 ... char array[2+1][4]; memcpy((void *)array, TEXT, sizeof(TEXT)); ... 

Но это не привело бы к автомасштабируемым массивам. Возможно, вы думаете о следующем:

 #include  #include  #include  #include  char **matrixify(char text[], int vert, int horiz) { int i=0; char **m = (char **)calloc(vert, sizeof(char*)); do m[i] = text + i * horiz; while(i++ < vert); return m; } int main() { int x, y; /* char t[] = "this is a really long text with many words and stuff"; */ char t[] = "GOODMORN"; int edge = 1+(int)sqrt((double)strlen(t)); /* make a square from text */ /* int vert = edge, horiz = edge; */ /* Auto size detection */ int vert = 2, horiz = 4; char *textbuf = (char *)calloc(vert, horiz); /* not always 0-terminated */ char **matrix = matrixify(strncpy(textbuf, t, vert*horiz), vert, horiz); for(y=0; y 

который приводит к вашей памяти, но выглядит сложным для состояния проблемы, но это C ...

С уважением

БВ