como pasar variable de una a otra desde una funcion

Iniciado por geshiro, 21 Mayo 2016, 19:42 PM

0 Miembros y 1 Visitante están viendo este tema.

geshiro

como puedo hacr que en mi funcion recursiva pase a mi variable str3 todo el valor de la funcion recursiva

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
char str1[20],str2[20],str3[20];
void myStrcat(char [],char []);

void myStrcat(char str1[],char str2[]){
int c,d;
c = 0;

   while(str1[c] != '\0') {
      c++; 
   }

   d = 0;

   while(str2[d] != '\0'){
      str1[c] = str2[d];
      d++;
      c++;
   }

   str1[c] = '\0';
}


int main(){
cout << "Enter first string: " << endl;
cin >> str1;
cout << "Enter secound string: " << endl;
cin >> str2;
myStrcat(str1,str2);
cout << "Result is " << str1 << endl;
}

HardForo

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

geshiro

 aqui esta me da error de Segmentation fault
Código (cpp) [Seleccionar]

   #include <iostream>
using namespace std;
void myStrcat(char [],char [],char []);
char str1[20],str2[20],str3[20];
void myStrcat(char str1[],char str2[], char str3[]){
int c,d;
     c = 0;

if((str1 != '\0') && (str2 != '\0')){
str3 = str1;
myStrcat(str1+1, str2, str3+1);
}else if((str1 == '\0') && (str2 != '\0')){
str3 = str2;
myStrcat(str1+1, str2, str3+1);
}
str3[c] = '\0';
}


int main(){
cout << "Enter first string: " << endl;
cin >> str1;
cout << "Enter secound string: " << endl;
cin >> str2;
myStrcat(str1,str2,str3);
cout << "Result is " << str3 << endl;
}

AlbertoBSD

Tu funcion tiene buffer overflow si lo que quieres es concatenar cadenas la funcion recursiva no te sirve..

Te recomiendo usar memset strlen y si acaso snprintf
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

engel lex

tienes un par de problemas confusos

myStrcat(str1,str2,str3);

debería ser
yStrcat(&str1,&str2,&str3);
por ser array

(str1 != '\0') && (str2 != '\0')
está mal porque los 3 str son array, y no pueden ser '\0' eso inplicaría que son un punto de esa cadena

myStrcat(str1+1, str2, str3+1);
estás sumandole un entero a un array char...

en alguno de estos puntos es el segmentation (o en todos)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

geshiro


geshiro

como podria modificar mi funcion para que pueda concatenar

AlbertoBSD

char *myStrcat(char *str1,char *str2){
int len = strlen(str1)+strlen(str2);
char *nuevo = calloc(len +1,sizeof(char));
snprintf(nuevo,len,"%s%s",str1,str2);
return nuevo;
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

geshiro

pero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/

engel lex

Citarpero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/
ya fallaste
void myStrcat(char str1[],char str2[], char str3[])

eso es una función con punteros como argumentos XD si vas a pasar array inevitablemente se hace uso de punteros, en su defecto declara los array globales y mystrcat no lleva argumentos, (a demás por ser globales pueden producir comportamiento no esperado) simplemente la llamas y sabe que str3 va todo lo de 1 y 2

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.