Concatenar matrices de caracteres utilizando strcat.
Estoy trabajando en un pequeño algoritmo de encriptación que hace lo siguiente:
conversión:
input = 356307042441013 a output = 333536333037303432343431303133
y funciona así:
si un número es igual a 3, lo cambia por 333, excepto si está en la última posición de la cadena.
si no, agregamos 3 entre cada par de números que son diferentes de 3.
input = 3 5 6 3 0 7 0 4 2 4 4 1 0 1 3
a
output = 333 5 3 6 333 0 3 7 3 0 3 4 3 2 3 4 3 4 3 1 3 0 3 1 3 3
Para hacerlo, escribí este código:
int main() {
const char *imei = “362162356836934568”;
char *imei_buffer;
strcpy(imei_buffer,’\0′);
int i = 0;
while (i < strlen(imei))
{
if (i <= (strlen(imei) – 1))
{
if (imei[i] == ‘3’)
{
strcat(imei_buffer, “333”);
}
else if ((imei[i] != ‘3’) && (imei[i + 1] == ‘3’))
{
strcat(imei_buffer, &imei[i]);
//strcat(imei_buffer,’3′);
}
else if ((imei[i] != ‘3’) && (imei[i + 1] != ‘3’))
{
strcat(imei_buffer, &imei[i]);
strcat(imei_buffer, “3”);
}
}
else if (i == strlen(imei))
{
if (imei[i] == ‘3’)
{
strcat(imei_buffer, “333”);
}
else if (imei[i] != ‘3’)
{
else if (i == strlen(imei))
{
strcat(imei_buffer, &imei[i]);
//strcat(imei_buffer,’3′);
}
i++;
}
printf("imei_buffer : %s",imei_buffer);
return 0;
}
El código se ejecuta sin errores, pero no muestra ningún resultado al final.
¿Dónde podría haber cometido un error en esta implementación?
davy.ai
Hay algunos problemas potenciales en esta implementación:
imei_buffer
no está siendo asignado memoria antes de ser utilizado constrcpy
ystrcat
. Esto puede causar un comportamiento indefinido y podría ser la razón de la falta de resultado. La memoria debería ser asignada dinámicamente conmalloc
antes de utilizar el buffer.Las declaraciones condicionales en el bucle
while
verificani <= (strlen(imei) - 1)
yi == strlen(imei)
. Esto omitirá por completo el último dígito enimei
. La primera condición debería cambiarse ai < strlen(imei)
para incluir el último dígito en el bucle.En la segunda declaración
else if
, se está utilizando&
en lugar de&
. Esto causará un error de compilación.Para solucionar estos problemas, el código podría modificarse de la siguiente manera:
Este código debería asignar un buffer con una longitud suficiente para el resultado, corregir las declaraciones condicionales para incluir el último dígito y utilizar la sintaxis correcta en la segunda declaración
else if
.