elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ERROR excepcion: char* = char* + n
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ERROR excepcion: char* = char* + n  (Leído 6,078 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
ERROR excepcion: char* = char* + n
« 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!


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #1 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/


« Última modificación: 20 Enero 2012, 10:15 am por Akai » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #2 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.  
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #3 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.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ERROR excepcion: char* = char* + n
« Respuesta #4 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.
« Última modificación: 21 Enero 2012, 09:59 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #5 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
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #6 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
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #7 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.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #8 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
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: ERROR excepcion: char* = char* + n
« Respuesta #9 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.
« Última modificación: 21 Enero 2012, 20:21 pm por Akai » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Convertir char[] a char *[] ?
Programación C/C++
Sanlegas 2 4,972 Último mensaje 11 Julio 2010, 01:01 am
por leogtz
duda doble puntero char a matriz de char
Programación C/C++
neo_from_cs_matrix 3 6,269 Último mensaje 5 Septiembre 2011, 03:53 am
por rir3760
Lectura de matríz de char como char** o DWORD*
Programación C/C++
david_BS 3 3,580 Último mensaje 20 Febrero 2012, 20:49 pm
por Eternal Idol
[C] char * vs char [] « 1 2 »
Programación C/C++
GGZ 16 8,120 Último mensaje 17 Abril 2016, 20:10 pm
por HardForo
char* char** y VB6
Programación C/C++
^[GS]^ 2 2,405 Último mensaje 29 Mayo 2018, 23:18 pm
por ^[GS]^
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines