Necesito buscar en un trozo de memoria una cadena de caracteres, pero varias de estas cadenas tienen cada carácter nulo separado, como este:
"I. .am. a. .string "
con todos los '.' s son caracteres nulos. Mi problema proviene de poner esto en la memoria. He intentado varias maneras, por ejemplo:Manipulación de cadenas C con múltiples caracteres nulos en la memoria
char* str2;
str2 = (char*)malloc(sizeof(char)*40);
memcpy((void*)str2, "123\0567\09abc", 12);
pondrá lo siguiente en la memoria que los puntos str2 a: 123.7.9abc..
Algo así como
str2 = "123456789\0abcde\054321";
tendrá str2 que apunta a un bloque de memoria que las apariencias como 123456789.abcde,321
, donde el '.' es un personaje nulo, y el ',' es una coma real.
Así que insertar claramente caracteres nulos en cadenas de caracteres no funciona tan fácilmente como pensé, como insertar un carácter de nueva línea. Encontré dificultades similares para probar esto con la biblioteca de cadenas también. Que podía hacer asignaciones separadas, algo así como:
char* str;
str = (char*)malloc(sizeof(char)*40);
strcpy(str, "123");
strcpy(str+4, "abc");
strcpy(str+8, "ABC");
Pero eso no es ciertamente preferible, y creo que el problema radica en mi entendimiento de cómo las cadenas de c-estilo se almacenan en la memoria. Claramente, "abc \ 0123" no entra realmente en la memoria como 61 62 63 00 31 32 33
(en hexadecimal). ¿Cómo se almacena y cómo puedo almacenar lo que necesito?
(también me disculpo por no haber configurado el código en bloques, esta es la primera vez que publico una pregunta, y de alguna manera "cuatro espacios" es más difícil de lo que puedo manejar aparentemente. Gracias, Luchian. Veo más nuevas líneas fueron necesarios.)
Utilice el botón {} por encima de la ventana de edición, o Ctrl-K, para crear bloques de código. –