Convertir “4W2R” a “WWWWRR” Error – Excepción lanzada: violación de acceso de escritura
El objetivo del programa es convertir una cadena como esta – “4R2W5X” en esto -> ‘RRRRWWXXXXX’
Obtuve una plantilla de un código preparado y tuve que completar los espacios vacíos, puede notar que no estoy usando todas las variables que me dan en la plantilla.
Tengo un error cuando trato de ejecutar esto (marcaré la línea de error en el código) – violación de acceso
La plantilla sin mis respuestas está abajo, puede ver dónde se pide completar el espacio vacío.
void decode(char* source, char* dest)
{
int digit;
char* chr = " ";
int expander;
int legal <em>digit;
char* original</em> dest = dest;
if ((digit = atoi(source)/10)!=0) // Rellenar (1)
{
strcpy(dest, "ERROR: número impar de caracteres\n");
}
else
{
while ((*source >= '0') && (*source <= '9'))
{
*chr = *source; // Aquí es donde obtengo el error.
source++;
digit = atoi(source); // Rellenar (2)
for (expander = 0; expander < digit; expander++)
{
*dest = *chr; // Rellenar (3)
dest++;
}
source++;
}
if (*source == '\0')
{
*dest = '\0';
}
else
{
strcpy(original_dest, "ERROR: no se encontró un dígito donde se esperaba"); // Rellenar (4)
}
}
}
davy.ai
Solución
El error se debe a que
*chr
no ha sido inicializada y está apuntando a una ubicación de memoria inválida. Es necesario asignarle memoria antes de asignarle un valor.El código correcto para la función
decode
es el siguiente:Los cambios realizados en el código son los siguientes:
char* chr
se cambió achar chr
.strlen
.atoi(*source)
se cambió aatoi(source++)
.*chr
se cambió achr
.*dest
se cambió a*dest++
para pasar al siguiente elemento del arraydest
.Con estos cambios, el programa podrá convertir una cadena como “4R2W5X” en “RRRRWWXXXXX”.