Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: x64core en 20 Enero 2012, 09:36 am



Título: ERROR excepcion: char* = char* + n
Publicado por: x64core en 20 Enero 2012, 09:36 am
buenas tengo problema con este pinche codigo, lo e llegado a hacer hasta en asm y en c no puedo  :¬¬
es que esto de tipos no me gusta nada  :¬¬

Código:
int main()
{
char* i = new char[10] = "testing";

if(*i > 97) // si es mayor que 'a'
{
*i = *i +  3;
}
return 0;
}

intento sumarle un valor de 3 si el char es mayor que 97('a')
pero a la hora de asignar el valor resultante me sale ese error de excepcion ya intente hacer unos cuantos casting pero na... :/ como sea hace? :)
gracias!


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Akai en 20 Enero 2012, 10:13 am
Tu inicialización es incorrecta.

No puedes asignar cadenas de esta forma:

Código
  1. char* i = new char[10] = "testing";

En cambio, vas a tener que usar una función como strcpy, por ejemplo:

Código
  1. char* i = new char[10];
  2. strcpy(i,"testing");
  3.  

más info en:
http://cplusplus.com/reference/clibrary/cstring/strcpy/


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: x64core en 21 Enero 2012, 00:38 am
Bien, gracias, dejo el codigo por si a alguien le sirve:

Código
  1. void func1(void* d,void* s,int l)
  2. {
  3. __asm
  4. {
  5. push ecx
  6. push edi
  7. push esi
  8. push edx
  9. xor ecx,ecx
  10. xor edx,edx
  11. mov ecx,l
  12. mov edi,d
  13. mov esi,s
  14. lo: mov dl,[esi]
  15. mov [edi],dl
  16. inc esi
  17. inc edi
  18. loop lo
  19. pop edx
  20. pop esi
  21. pop edi
  22. pop ecx
  23. }
  24. }
  25.  
  26. int main()
  27. {
  28. char* tmp;
  29. char* p = "testing";
  30.  
  31. tmp = new char[10];
  32. func1(tmp,p,7);
  33.  
  34. if(*tmp > 97)
  35. {
  36. *tmp += 3;
  37. }
  38. delete[] tmp;
  39. return 0;
  40. }
  41.  


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Akai en 21 Enero 2012, 09:27 am
Tu código sigue teniendo errores, como mínimo en la función main

Código
  1. char* p = "testing";


Eso te va a dar, como minimo una violación de segmento debido a que *p no tiene memoria asignada.

No le puedes asignar algo a un puntero si no tiene memoria para recogerlo.


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Eternal Idol en 21 Enero 2012, 09:40 am
Akai estas confundido, ahi p apunta a la cadena literal "testing".

PD. Ese codigo no es portable por usar ensamblador sin necesidad, con memcpy (que esta optimizada para usar rep movs cuando sea eficiente) podes hacer exactamente lo mismo que con func1 y con strcpy podes copiar una cadena aunque cambie el tamaño.


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Akai en 21 Enero 2012, 10:28 am
Akai estas confundido, ahi p apunta a la cadena literal "testing".

FFFFUUU, cierto

Nota mental 256: No postees tal cual te levantas de dormir


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: x64core en 21 Enero 2012, 18:57 pm
@Eternal Idol:
 :o
enserio no es portable!!!? :|
osea que solo se ejecuta en un 386 o en un 486!
yo hice la funcion porque creo que es mas rapido que el propio memcpy o strcpy


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Akai en 21 Enero 2012, 19:09 pm
Consejo, RHL:

No pierdas tiempo reinventando la rueda. memcpy y strcpy llevan mucho tiempo y creeme que optimizaciones se les habrán dedicado.


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: x64core en 21 Enero 2012, 19:15 pm
:S ...
donde puedo ver el codigo de esas funciones?
e buscado en el archivo string.h y no encuentro el cuerpo de la funcion :P


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Akai en 21 Enero 2012, 19:31 pm
Porque eso es únicamente la cabecera. La implementación  de las funciones deberías poder encontrarla en los archivos de código fuente del compilador que utilices.


Título: Re: ERROR excepcion: char* = char* + n
Publicado por: Eternal Idol en 21 Enero 2012, 20:20 pm
@Eternal Idol:
 :o
enserio no es portable!!!? :|
osea que solo se ejecuta en un 386 o en un 486!
yo hice la funcion porque creo que es mas rapido que el propio memcpy o strcpy

No, el codigo en ensamblador no es portable por definicion, solo funcionara en x86 (ni siquiera en x64).