¿Y esto por que viola memoria?

Started by Danielo515, March 31, 2009, 08:43:27 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Mira que es simple de pelotas esta función, y sin embargo cuando la ejecuto, me da un error presumiblemente de violación de memoria.
No se si es que la sintaxis del puntero no es correcta o que demonios pasa.
Muchas gracias a todos los que contesten.

[code language="C"]
#include<stdio.h>
#include<conio.h>
#define fin '\0'

void copiar_caracter(char *cad, char a, int n);

int main(){
    printf(" Cadena original: %s\n Cadena modificada: ","danielorr");
    copiar_caracter("danielorr",'t',4);
    getch();
}//fin main

void copiar_caracter(char *cad, char a, int n){
     int i=0;
     while(cad!='\0' && i<n){
                       cad=a;
                       i++;
                       }
                      printf("%s",cad);
     }//fin copiar caracter[/code]

Sandman

#1
You were attempting to write in memory you cannot write in. You are passing copiar_caracter a constant string, a literate string even, which will result in the attempt to write to it, which is just not possible. It would be the same as strcpy("first constant","constant two"): both are just useless.
If you use a non-literate, it will work:
[code language="C"]
#include<stdio.h>
#include<conio.h>

#define fin '\0'

void copiar_caracter(char *cad, char a, int n);

int main(int argc, char** argv){
   char str[] = "zomg!";
   printf(" Cadena original: %s\n Cadena modificada: ","danielorr");
   copiar_caracter(str,'t',4);
//   getch();
   return 0;
}//fin main

void copiar_caracter(char *cad, char a, int n){
   int i=0;
   while(cad!='\0' && i<n) {
      cad=a;
      i++;
   }
   printf("%s",cad);
}//fin copiar caracter
[/code]
-- Sandman

Danielo515

ha ha ha, TRUE! Thank you sandman, your help gives sense to my life  :D

Thanks.