[ Foro de C ]

programación

23-Mar-2021 17:48
Invitado (ismaeh135)
0 Respuestas

Hola. Dispongo de este código en C, las funciones están correctas y todo, menos la última (4). A la hora de ejecutarlo en la terminal del pc, resulta que aparece el mensaje "Violación de segmento" y la verdad que es mi primer año estudiando programación. Me estoy volviendo loco buscando el error XD. Les pongo mi código:

#include <stdio.h>
#define num  40
int strlen1 (char s[num]);
void strcpy1 (char destino[num], char origen[num]);
int strcmp1 (char s1[num], char s2[num]);
void strcat1 (char destino[num], char origen[num]);
void main(){
int op=1,res,i=0;
char s[num], destino[num], origen[num], s1[num], s2[num];
while(op!=0){
printf("Seleccione una opción\n");
printf("0 - Salir del programa\n");
printf("1 - Cuenta los caracteres de una cadena\n");
printf("2 - Copia los caracteres de una primera cadena a otra\n");
printf("3 - Compara 2 cadenas de caracteres\n");
printf("4 - Concatena 2 cadenas\n");
scanf("%d", &op);
getchar();
switch(op){

case 0: printf("Adiós\n");
break;

case 1: printf("Introduce una cadena de caracteres\n");
scanf("%[^\n]",s);
res=strlen1(s);
printf("La longitud de la cadena es %d caracteres\n", res);
break;

case 2: printf("Introduce una cadena de caracteres\n");
scanf("%[^\n]",origen);
strcpy1(destino,origen);
printf("Las 2 cadenas de caracteres copiadas: %s\n",destino);
break;

case 3: printf("Introduce una primera cadena de caracteres\n");
scanf("%[^\n]",s1);
getchar();
printf("Introduce una segunda cadena de caracteres\n");
scanf("%[^\n]",s2);
res=strcmp1(s1,s2);
if (res==0) {
printf("%d, Las 2 cadenas son iguales\n", res);
}
else {
if (res<0){
printf("%d, la primera cadena es menor que la segunda\n", res);
}
else{
printf("%d, la primera cadena es mayor que la segunda\n", res);
}
}
break;

case 4: printf("Introduce la cadena de origen\n");
scanf("%[^\n]", origen);
getchar();
printf("Introduce la cadena de destino\n");
scanf("%[^\n]", destino);
getchar();
strcat1(destino,origen);
printf("El resultado de la unión es este: %s\n", destino);
break;

default: printf ("Opción no contemplada\n");
}
}
}

int strlen1 (char s[num]){
int i=0,cont=0;
while (s[i]!='\0'){
i++;
cont++;
}
return (cont);
}

void strcpy1 (char destino[num], char origen[num]){
int i=0;
while (origen[i]!='\0'){
destino[i]=origen[i];
i++;
}
}

int strcmp1 (char s1[num], char s2[num]){
int i=0, resta=0;
while(s1[i]==s2[i] && s1[i]!='\0' && s2[i]!='\0'){
i++;
}
if(s1[i]!=s2[i]){
resta=s1[i]-s2[i];
return(resta);
}
else if (s1[i]==s2[i]){
resta=0;
return(resta);
}
}

void strcat1 (char destino[num], char origen[num]){
int i=0,j=0;
while (origen[i]!='\0'){
i++;
}
while (destino[i]!='\0'){
destino[i+j]=origen[j];
j++;
}
destino[i+j]='\0';
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)