Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Destro- en 17 Marzo 2014, 20:48 pm



Título: Como devolver puntero con cadena vacia
Publicado por: Destro- en 17 Marzo 2014, 20:48 pm
Buenas.
Me tira APPCRASH muy random cuando uso esto

Código:
// otra funcion...
char copy[64];
strncpy(copy, getClipboard(), 63); // Crash
// code...

char *getClipboard()
{
char *strData;

if(OpenClipboard(NULL))
{
HANDLE hClipboardData = GetClipboardData(CF_TEXT);
if(hClipboardData != nullptr)
{
char *pchData = static_cast<char*>(GlobalLock(hClipboardData));
if(pchData != nullptr)
strData = pchData;
else strData = "\0";

GlobalUnlock(hClipboardData);
}
else strData = "\0";

CloseClipboard();
}
return strData;
}
Creo que es porque no estoy devolviendo correctamente el puntero de una cadena vaciá,como se hace ?,hay algún otro error o algo para mejorar ?.


Título: Re: Como devolver puntero con cadena vacia
Publicado por: ivancea96 en 17 Marzo 2014, 20:53 pm
Fíjate en qué parte falla. Ve poniendo pausas, por ejemplo. A mi me parece que va bien (no lo probé).


Título: Re: Como devolver puntero con cadena vacia
Publicado por: Eternal Idol en 17 Marzo 2014, 21:58 pm
Siempre inicializa las variables, si OpenClipboard falla strData tiene un valor indefinido.

Código
  1. char *strData = "";

PD. La cadena vacia como la hiciste es correcta tambien.


Título: Re: Como devolver puntero con cadena vacia
Publicado por: Destro- en 17 Marzo 2014, 22:10 pm
ok

entonces que puede estar causando el crash (Infracción de acceso al leer la ubicación 0x00000000) ?,es muy random y no logro saber en que situación se genera.
el trace solo me marca strncpy.

@EDIT
creo que ya esta solucionado,al inicializar la variable parece no crashear mas.
voy a seguir probando por las dudas


Título: Re: Como devolver puntero con cadena vacia
Publicado por: amchacon en 17 Marzo 2014, 22:22 pm
Código
  1. strData = "\0";

Estas apuntando a una cadena de 2 nulos. La sintaxis correcta sería:
Código
  1. strData = "";

Pero vamos, eso es irrelevante para los crashs.



Título: Re: Como devolver puntero con cadena vacia
Publicado por: Destro- en 17 Marzo 2014, 22:25 pm
Si,parece que era eso :D.
Por ahora parece estar funcionado con la variable inicializada.

Gracias.


Título: Re: Como devolver puntero con cadena vacia
Publicado por: Eternal Idol en 17 Marzo 2014, 22:30 pm
Si,parece que era eso :D.
Por ahora parece funcionado con la variable inicializada.

Gracias.

De nadas.

PD. Por definicion una cadena esta terminada en 0 asi que si su primer byte es 0 ahi termina.