¿Cómo puedo escribir una cadena en una matriz bidimensional en C?

¿Puedo saber cómo puedo escribir una cadena de caracteres en una matriz de caracteres 2D? Necesito leer todos los caracteres de la cadena y colocarlos en una matriz 2D.

Por ejemplo:

cadena de caracteres [10];

Quiero escribir todos los caracteres de la cadena en una matriz 2D.

Eso significa que, cuando leo array [0] [0], debería obtener el primer carácter.

Actualizar:

Supongamos que mi cadena es “GOODMORN”, entonces la matriz 2D debería tener este aspecto …

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

Primero, asegúrate de que array[0] sea ​​lo suficientemente grande como para sostener tu cadena. En segundo lugar, use memcpy o strncpy para copiar los bytes de la string en la array[0] .

Si necesita procesar y abordar cada carácter individualmente, puede comenzar haciendo lo que hace memcpy, pero en un bucle 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)]; } } 

Un progtwig de muestra que acabo de escribir para que juegues y veas si esto es lo que quieres. La parte importante es donde los bucles entran en el juego, dividiendo las cadenas carácter por carácter.

Se pueden realizar muchas mejoras (strncpy, la variable de entrada es dinámica, MEMORIA LIBRE, etc.), pero esto depende de usted.

Edición: La modificación de strncpy fue publicada por botas de goma.

 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 .: La salida debe ser como

Hola [final]
Fin del mundo]

La etiqueta es para mostrar si hay espacios, es decir, donde ocurrió exactamente la división.

Descargo de responsabilidad: realmente no entendí de qué se trata la pregunta 😉

simplemente puede copiar la cadena en una ubicación señalada por la constante de matriz para la matriz 2D:

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

Pero esto no produciría arreglos auto-considerables. Tal vez pienses en lo siguiente:

 #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 

lo que lleva al diseño de la memoria pero parece complicado para el estado del problema, pero es C ...

Saludos

rbo