Como devolver puntero con cadena vacia

Iniciado por Destro-, 17 Marzo 2014, 20:48 PM

0 Miembros y 2 Visitantes están viendo este tema.

Destro-

Buenas.
Me tira APPCRASH muy random cuando uso esto


// 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 ?.

ivancea96

Fíjate en qué parte falla. Ve poniendo pausas, por ejemplo. A mi me parece que va bien (no lo probé).

Eternal Idol

Siempre inicializa las variables, si OpenClipboard falla strData tiene un valor indefinido.

char *strData = "";

PD. La cadena vacia como la hiciste es correcta tambien.
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

Destro-

#3
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

amchacon

Código (cpp) [Seleccionar]
strData = "\0";

Estas apuntando a una cadena de 2 nulos. La sintaxis correcta sería:
Código (cpp) [Seleccionar]
strData = "";

Pero vamos, eso es irrelevante para los crashs.

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Destro-

#5
Si,parece que era eso :D.
Por ahora parece estar funcionado con la variable inicializada.

Gracias.

Eternal Idol

Cita de: Destro- en 17 Marzo 2014, 22:25 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.
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