none
Retornando String, onde estou errando? RRS feed

  • Pergunta

  • Bom dia pessoal,

    Estou querendo passar um parâmetro para a função getString e retornar uma string juntando as duas e formando a mensagem Visual C++, como faço?

     

    #include "stdafx.h"
    #include <windows.h>

     

    char *getString(char * msg)
    {
     strcpy(msg,"C++");

     return msg;
    }

     

    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {

     MessageBox(NULL,getString("Visual "),"Win32 Message",MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);

     
     return 0;
    }

    quarta-feira, 3 de setembro de 2008 13:35

Respostas

  • Olá.

     

    Não funciona por vários motivos...

     

    1-) No C++, não é possível copiar um texto para uma string constante ("Visual "). Você precisa alocar memória (dinamicamente ou não), e trabalhar em cima dessa memória (buffer). Este é o motivo principal pelo qual o seu código não funciona.

     

    2-) Se por acaso o seu código funcionasse, o strcopy iria substituir o valor em memória, e você teria apenas "C++", ao invés da string completa "Visual C++". O que você quer usar ali, não e strcopy, mas strcat - para concatenar.

     

    3-) Dependendo das configurações do seu projeto (Unicode ou não), a API MessageBox pode estar sendo redirecionada para a MessageBoxW, que recebe caracteres Unicode (wchar_t) e não Ansi (char) como a MessageBoxA. O ideal seria usar a define TCHAR se possível.

     

    De qualquer forma, para colocar seu exemplo a funcionar:

     

    Code Snippet

     

     char* getString(char * msg)

     {

    strcat(msg, "C++");

    return msg;

     }

     

     int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

     {

    char mensagem[100];

    strcpy(mensagem, "Visual ");

     

    MessageBoxA(NULL, getString(mensagem), "Win32 Message", MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);

     

    return 0;

     }

     

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 3 de setembro de 2008 14:10