es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eficiente strcpy y mover el puntero al final del destino.

Necesito copiar algunas cadenas parecidas a C a otra y mover su puntero. Escribí un wrapper alrededor de strcpy que mueve el puntero de destino y me pregunto si hay una mejor manera de hacer esto.

Esto es lo que he hecho hasta ahora:

#include <string.h>
#include <stdio.h>

// copia t en *s y mueve el puntero **s al final
void write_obj(char ** s, char * t) {
strcpy(*s, t);
(*s) += strlen(t);
}

void main(){
char json_str[1024];
char* json_str_ptr;
char** s = &json_str_ptr;

printf("Inicializar:\r%08x\n", *s);

write_obj(s, "12345678");

printf("%08x\n", *s);

write_obj(s, "1234");

printf("%08x\n", *s);

}

¿Hay una manera mejor y / o más eficiente de hacer esto?

¿Qué pasa simplemente copiando caractér por caractér e incrementando (*s) en un bucle hasta que llegue a \0 en el array de origen o al final del array de destino?

Estoy probando esto ahora en el compilador de msvc, pero el código se enfocará en un microcontrolador STM32 y esta será una función muy utilizada.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es posible utilizar un bucle para copiar los caracteres uno por uno e incrementar (*s) hasta alcanzar el \0 en el arreglo fuente o el final del arreglo objetivo. Esto podría ser más eficiente que usar strcpy ya que sólo copiaría los caracteres necesarios y no toda la cadena. Sin embargo, es importante considerar las limitaciones de memoria del microcontrolador STM32 al decidir qué enfoque utilizar.

Comments are closed.