Su puntero se está copiando en la pila, y está asignando el puntero de la pila. Tiene que pasar un puntero a puntero si desea cambiar el puntero:
void SetName(char **pszStr)
{
char* pTemp = new char[10];
strcpy(pTemp,"Mark");
*pszStr = pTemp; // assign the address of the pointer to this char pointer
}
int _tmain(int argc, _TCHAR* argv[])
{
char* pszName = NULL;
SetName(&pszName); // pass the address of this pointer so it can change
cout<<"Name - "<<*pszName<<endl;
delete pszName;
return 0;
}
que va a resolver su problema.
Sin embargo, hay otros problemas aquí. En primer lugar, está desreferenciando su puntero antes de imprimir. Esto es incorrecto, el puntero es un puntero a un array de caracteres, por lo que desea imprimir toda la matriz:
cout<<"Name - "<<pszName<<endl;
Lo que tenemos ahora se acaba de imprimir el primer carácter. Also, es necesario utilizar delete []
eliminar una matriz: problemas
delete [] pszName;
más grandes, sin embargo, están en su diseño.
Ese código es C, no C++, e incluso entonces no es estándar. En primer lugar, la función que estás buscando es main
:
int main(int argc, char * argv[])
En segundo lugar, se debe utilizar references en lugar de punteros:
void SetName(char *& pszStr)
{
char* pTemp = new char[10];
strcpy(pTemp,"Mark");
pszStr = pTemp; // this works because pxzStr *is* the pointer in main
}
int main(int argc, char * argv[])
{
char* pszName = NULL;
SetName(pszName); // pass the pointer into the function, using a reference
cout<<"Name - "<<pszName<<endl;
delete pszName;
return 0;
}
Aparte de eso, por lo general es mejor simplemente volver las cosas si se puede :
char *SetName(void)
{
char* pTemp = new char[10];
strcpy(pTemp,"Mark");
return pTemp;
}
int main(int argc, char * argv[])
{
char* pszName = NULL;
pszName = SetName(); // assign the pointer
cout<<"Name - "<<pszName<<endl;
delete pszName;
return 0;
}
Hay algo que hace todo esto mejor. C++ tiene una string class:
std::string SetName(void)
{
return "Mark";
}
int main(int argc, char * argv[])
{
std::string name;
name = SetName(); // assign the pointer
cout<<"Name - "<< name<<endl;
// no need to manually delete
return 0;
}
Si por supuesto todo esto puede ser simplificado, si quieres:
#include <iostream>
#include <string>
std::string get_name(void)
{
return "Mark";
}
int main(void)
{
std::cout << "Name - " << get_name() << std::endl;
}
usted debe trabajar en su formato para hacer las cosas más fácil de leer. Espacios entre medio de sus operadores de ayuda:
cout<<"Name - "<<pszName<<endl;
cout << "Name - " << pszName << endl;
Al igual que en los espacios entre las palabras inglesas ayuda, sodoesspacesbetweenyouroperators. :)
+1, responde el problema directo e ilumina el problema mayor con el código. –
Gracias GMan. Fue realmente informativo. – Mark
No hay problema :) – GManNickG