Error en cadenas C...ayuda!!

Ska
12 de Diciembre del 2005
Buenas. Tengo ke hacer una funcion en la ke dada una cadena de caracteres, copie desde la posicion "p", "n" caracteres a otra cadena.
He hecho esto:

[code]#include <stdio.h>
#include <string.h>

void mid(char *origen, char *destino, int n, int p){
int i;
origen = 0;
destino = 0;
for(i = 0; i < p; i++)
origen++;
for(i = 0; i < n; i++){
*destino = *origen;
destino++;
origen++;
}
printf("Destino: %s", destino);
}

int main(){
int n, p;
char *o, *d;
printf("Escribe cualquier texto: ");
scanf("%s", &o);
printf("Dame la posicion desde la que se va a copiar: ");
scanf("%d", &p);
printf("Dame el numero de caracteres que se van a copiar: ");
scanf("%d", &n);
mid(o, d, n, p);
return 0;
}[/code]

El programa se compila correctamente, pero no funciona correctamente. A ver si me podeis ayudar para encontrar donde esta el error...
Gracias.

pedrohv012005
12 de Diciembre del 2005
Hola:
Tienes que arreglar algunas cosas.
Primero, en void mid(char *origen, char *destino, int n, int p) no puedes poner origen=0; destino=0;
Eso significa que pondras las dos cadenas a NULL, o sea, perderas la referencia a ellas.
Prueba esto:
void mid(char *origen, char *destino, int n, int p){
int i,k;
for ( i=p,k=0; k<n; k++, i++ )
destino[k] = origen[i];
}

al llamar a la funcion mid debes hacerlo con cadenas a las cuales ya les debes haber asignado memoria con el operador new.
Ejemplo:
char * cad1 = "cadena de prueba" , *cad2;
cad2 = new char[10];
//------------Llamada
mid(cad1,cad2,5,4);