2009-02-25 13 views

risposta

15

Dato che hai menzionato stdout.txt, l'ho fatto per vedere cosa avrebbe creato uno stdout.testo; normalmente, anche con un'app di Windows, l'output della console passa alla console allocata o in nessun posto se non ne viene assegnato uno.

Quindi, supponendo che si stia utilizzando SDL (che è l'unica cosa che ha richiamato stdout.txt), è necessario seguire il consiglio here. O freopen stdout e stderr con "CON", o fai l'altro linker/compilare soluzioni alternative lì.

Nel caso in cui il collegamento si rompe di nuovo, qui è esattamente ciò che è stato riferito da libSDL:

Come posso evitare di creare stdout.txt e stderr.txt?

"Credo che all'interno del progetto Visual C++ fornito con SDL sia presente un obiettivo SDL_nostdio> è possibile creare ciò che fa ciò che si desidera (TM)."

"Se si definisce" NO_STDIO_REDIRECT "e si ricompila SDL, penso che risolverà il problema." >> (Risposta per gentile concessione di Bill Kendrick)

+0

Grazie mille! Questo mi ha seccato per un bel po 'di tempo –

2

L'applicazione deve essere compilata come un'applicazione console Windows.

1

Suppongo tu stia utilizzando una versione di Visual Studio? In Windows, std::cout << "something"; dovrebbe scrivere qualcosa su una finestra della console SE il tuo programma è configurato nelle impostazioni del progetto come un programma di console.

4

Prima di tutto, quale ambiente di compilatore o dev stai usando? Se Visual Studio, è necessario creare un progetto di applicazione per console per ottenere l'output della console.

In secondo luogo,

std::cout << "Hello World" << std::endl;

dovrebbe funzionare in qualsiasi applicazione console C++.

+5

No, che invia all'uscita standard - e che non scrive sempre sulla console (a seconda di come è allocato). Da qui la domanda dell'OP, e il motivo per cui leggo questo thread quasi due anni dopo! :-) – winwaed

4

Se si sta utilizzando Visual Studio è necessario modificare la proprietà progetto: Proprietà di configurazione ->Linker -> Sistema ->sottosistema.

Questo dovrebbe essere impostato su: Console (/ SUBSYSTEM: CONSOLE)

Inoltre si dovrebbe cambiare la vostra WinMain essere questa firma:

int main(int argc, char **argv) 
{ 
    //... 
    return 0; 
} 
1

Se si utilizza Visual Studio, è dovrebbe funzionare bene!

Ecco un esempio di codice:

#include <iostream> 

using namespace std; 

int main (int) { 
    cout << "This will print to the console!" << endl; 
} 

Assicurarsi si è scelto un'applicazione console Win32 quando si crea un nuovo progetto. È comunque possibile reindirizzare l'output del progetto in un file utilizzando lo switch di console (>>). In questo modo reindirizzare la pipe della console dallo stdout al tuo file. (ad esempio, myprog.exe >> myfile.txt).

Vorrei non sbagliarmi!

5

Se si dispone di un'applicazione per Windows senza console, è possibile creare una console con la funzione AllocConsole. Una volta creato, puoi scriverlo usando i normali metodi std :: cout.

+0

Penso che devi ancora reindirizzare i descrittori io per farlo funzionare (come fa l'esempio guicon). In alternativa, usa invece OutputDebugString. – rogerdpack

4

La funzione API di Windows AllocConsole creerà una finestra della console per l'applicazione.

2

se utilizzare sottosistema: console o sottosistema: finestre tipo di dipende dal fatto che come si desidera avviare l'applicazione:

  • Se si utilizza sottosistema: console , quindi si ottiene tutto lo stdout scritto sul terminale. Il problema è che se si avvia l'applicazione dal menu Start/Desktop, si ottiene automaticamente una console e la finestra dell'applicazione (che può apparire piuttosto brutta).
  • Se si utilizza il sottosistema: windows, non sarà possibile ottenere stdout/stderr anche se si esegue l'applicazione da una finestra DOS, Cygwin o un altro terminale.

Se si desidera che la via di mezzo, che è quello di uscita al terminale se l'applicazione è stata avviata in un terminale, quindi seguire il link che Luca fornito nella sua soluzione (http://dslweb.nwnexus.com/~ast/dload/guicon.htm)

Per avere un riferimento, mi sono imbattuto in questo problema con un'applicazione che voglio eseguire in una normale modalità Windows o in modalità batch (ovvero, come parte di uno script) a seconda delle opzioni della riga di comando. L'intera differenziazione tra console e applicazioni Windows è un po 'bizzarra per gli Unix!

+1

Hai bisogno di cambiare un po' l'esempio nel link: sostituisci AllocConsole() con AttachConsole (ATTACH_PARENT_PROCESS) per l'output sulla stessa console che ha avviato l'applicazione, se l'applicazione è stata avviata su una console . In caso contrario, questa funzione restituirà 0. – Ruud

0

Se si utilizza MinGW, aggiungere un'opzione, -Wl,subsystem,console o -mconsole.

5

Per il debug in Visual Studio è possibile stampare alla console di debug:

OutputDebugStringW(L"My output string."); 
Problemi correlati