Benutzereingabe in PWSTR speichern?

Und das ist 99% die Schuld der seltsamen Zuweisung von PWSTR consumer = &consumer[0];

Visual Studio gibt da A) eine Warnung beim Kompilieren, weil consumer nicht initialisiert wird und B) beim Debuggen einen Runtime-Check-Error

Wenn ich dann nur ein Zeichen eingebe, stürzt das ganze ab.

Ernsthaft, was für einen Compiler hast du da? Du hast da einen Pointer, der auf sich selbst zeigt, und schreibst dann rein. Das hat alle möglichen Spätfolgen, wenn es nicht sofort kracht.
Versuch wirklich mal, da etwas reinzusetzen, worauf der Zeiger zeigen kann.

Nachdem ich die eine Zeile durch das ersetzt habe:

wchar_t hurz[256];
PWSTR consumer = &hurz[0];

läuft das einwandfrei, und ich bekomme auch nicht zweimal User2 ausgegeben.

Hier nochmal das komplette Teil, wie es bei mir sauber läuft:

Code:
#include "stdafx.h"

#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

  wchar_t*  wszGroupID = L"User1";

  PWSTR publisher = wszGroupID; // wszGroupID wurde anfangs and die Funktion übergeben
  wprintf( L"%s\n", publisher); // Ausgabe = User1
  //Benutzereingabe
  wchar_t   hurz[256];
  PWSTR consumer = &hurz[0];
  //cout<<"Usernamen eingeben:\n"; // Eingabe = User2
  wscanf( L"%ls", consumer);
  wprintf( L"%s\n", consumer); // Ausgabe = User2
  wprintf( L"%s\n", publisher); // Ausgabe = User2



	return 0;
}

Projekttyp Konsole, VS 2003
 
Ich glaube allerdings auch, daß es nicht geht, auch wenn der Compiler sich nicht beschwert. Du legst zwar eine Variable 'consumer' als Zeiger auf WSTR an, die Größe des Speicherbereichs ist aber 0, da Du keinen anlegst. Da kann es schon sein, daß 'consumer' und 'publisher' auf die gleiche Adresse zeigen. Wenn Du dann in 'consumer' schreibst, schreibst Du in Wirklichkeit in 'publisher'.
 
Wenn du Visual Studio benutzt, stell den Warnungslevel in den Projekteigenschaften IMMER auf mindestens 3. Dann spuckt der Compiler da auch eine nette Warnung aus.

Tips aus meiner Hosentasche: Warnungen immer beachten und wenn möglich die Ursache bearbeiten! (nicht weghacken)
 
Ich danke euch ganz herzlich für die Antworten!

Also ich benutze VS.NET und das hat mir nie ne Warnung ausgespuckt. Ich bin kein c++ Crack und mit diesen komischen Pointern und Microsoft PWSTRs komm ich erst recht noch nicht wirklich zurecht :D

Allerdings habt ihr mit euren Einwänden recht, ich werde das nochmal testen, obwohl ich inzwischen einen Workaround gefunden habe, um das Problem zu umgehen.
Danke vielmals für die Tipps, habt ihr vielleicht noch ne gute Quelle die sich irgendwie mit der Thematik auseinandersetzt? Wär klasse!

Grüße, Felsti
 
Nochmal mit den Warnungen: Ich meine, neue Projekte werden immer mit Warnungs-Level 1 angelegt, was ziemlich fürn A**** ist.

Einfach unter Projekt-Eigenschaften->C/C++->Generell den Warning Level auf 3 setzen (bei 4 gibt's bei der STL viele nicht ganz berechtigte Extra-Warnungen)
 
Zurück