char an char anhängen

Diskutiere char an char anhängen im Developer Network Forum im Bereich Hardware & Software Forum; Hi, mein TCHAR szPath[MAX_PATH]; TCHAR szBild[MAX_PATH]="\\registry.bmp"; TCHAR szWindir[MAX_PATH]; GetEnvironmentVariable("windir", szWindir...
  • char an char anhängen Beitrag #1
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Hi,
mein
Code:
TCHAR szPath[MAX_PATH];
TCHAR szBild[MAX_PATH]="\\registry.bmp";
TCHAR szWindir[MAX_PATH];

GetEnvironmentVariable("windir", szWindir, sizeof(windir));

[COLOR="red"]//szWindir + szBild = szPath[/COLOR]

SystemParametersInfo(
SPI_SETDESKWALLPAPER,
0,
szPath,
SPIF_SENDCHANGE|SPIF_UPDATEINIFILE);
ich bekomme von GetEnvironmentVariable "%windir% und muss nun an windir "\\registry.bmp" anhängen, um einen Pfad zu meinem Neuen Desktophintergrund zu bekommen.
 
  • char an char anhängen Beitrag #2
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
strcat (szPath, szBild);
 
  • char an char anhängen Beitrag #3
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
fast...
Code:
[SIZE="-5"]1>c:\dokumente und einstellungen\max\eigene dateien\
visual studio 2008\projects\lnk\desktop_ändern\desktop_ändern\
main.cpp(13) :[/SIZE] 

warning C4996: 'strcat': This function or variable may be unsafe. 
Consider using strcat_s instead. To disable deprecation, use
 _CRT_SECURE_NO_WARNINGS. See online help for details.
 
  • char an char anhängen Beitrag #4
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
hat keiner eine Idee wie es trotzdem funktioniert?
Oder muss ich es wieder via "ifstream":grinning: machen
 
  • char an char anhängen Beitrag #5
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

naja - ist ja erstmal nur 'ne Warnung mit einem Hinweis. Funktionieren sollte es trotzdem. Was passiert denn, wenn Du dem Hinweis in der Warnung folgst?

Gruss, FFNB.
 
  • char an char anhängen Beitrag #6
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Kompilieren tut's ja, aber dann...

im Debugging-Modus:

Es kommt ne' MessageBox:
Code:
Durch einen Pufferüberlauf in desktop_ändern.exe
wurde der interne Programmzustand beschädigt.
Klicken Sie auf "Unterbrechen", um das Programm
zu debuggen, oder auf "Weiter", um es zu beenden.

Weitere Informationen finden Sie im Hilfethema 
"Gewusst wie: Debugging von Pufferüberlaufproblemen".
Unterbrechen Weiter

Weiter klicken bringt auch nix, da funzt nix!
 
  • char an char anhängen Beitrag #7
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

und was ist hiermit: "...Consider using strcat_s instead..."?

Gruss, FFNB.
 
  • char an char anhängen Beitrag #8
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
http://msdn.microsoft.com/en-us/library/d45bbxx4(VS.80).aspx
hmm, muss mal lesen wie das wieder geht...

das Beispiel von msdn:
Code:
char [B]buf[16[/B]];
strcpy_s(buf, [B]16[/B], "Start");
strcat_s(buf, [B]16[/B], " End");               // Correct
strcat_s(buf, 16 – strlen(buf), " End"); // Incorrect
Ich muss also angeben, wie viel in dem "Buf" drinn ist?
 
  • char an char anhängen Beitrag #9
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Kompilieren tut's ja, aber dann...

im Debugging-Modus:

Es kommt ne' MessageBox:
Code:
Durch einen Pufferüberlauf in desktop_ändern.exe
wurde der interne Programmzustand beschädigt.
Klicken Sie auf "Unterbrechen", um das Programm
zu debuggen, oder auf "Weiter", um es zu beenden.

Weitere Informationen finden Sie im Hilfethema 
"Gewusst wie: Debugging von Pufferüberlaufproblemen".
Unterbrechen Weiter

Weiter klicken bringt auch nix, da funzt nix!
Dann hast Du einen Fehler in Deinem Programm. Da kann die strcat-Funktion nichts dafür ;-)
Laß doch mal das Programm im Debug-Modus laufen und drück dann auf Unterbrechen. Dann sollte das Programm dort angehalten werden, wo das Problem auftritt. Dann schaust Du Dir die Variablen an. Evtl. ist ein Buffer zu klein.
Wenn das auch nicht weiterhilft, dann poste doch mal den Source.
 
  • char an char anhängen Beitrag #10
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Klick > Code < Klick

Code:
Code:
#include <windows.h>
#include <string.h>


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	TCHAR szPath[MAX_PATH];
	TCHAR szBild[MAX_PATH]="\\Seifenblase.bmp";
	TCHAR szWindir[MAX_PATH];
	
	GetEnvironmentVariable("windir", szWindir, sizeof(szWindir));
	
	strcat_s (szPath, 260,  szBild);
	strcat_s (szPath, 260, "\\Seifenblase.bmp\0");


	SystemParametersInfo(
		SPI_SETDESKWALLPAPER,
		0,
		szPath,
		SPIF_SENDCHANGE|SPIF_UPDATEINIFILE);
}


Kompilieren:

1>------ Neues Erstellen gestartet: Projekt: desktop_ändern, Konfiguration: Debug Win32 ------
1>Die Zwischen- und Ausgabedateien für das Projekt "desktop_ändern" mit der Konfiguration "Debug|Win32" werden gelöscht.
1>Kompilieren...
1>main.cpp
1>Manifest in Ressourcen wird kompiliert...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Verknüpfen...
1>LINK : C:\Dokumente und Einstellungen\Max\Eigene Dateien\Visual Studio 2008\Projects\desktop_ändern\Debug\desktop_ändern.exe wurde nicht gefunden oder beim letzten inkrementellen Linkvorgang nicht erstellt; vollständiger Link wird durchgeführt.
1>Das Manifest wird eingebettet...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Max\Eigene Dateien\Visual Studio 2008\Projects\desktop_ändern\desktop_ändern\Debug\BuildLog.htm" gespeichert.
1>desktop_ändern - 0 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 1 erfolgreich, Fehler bei 0, 0 übersprungen ==========

Error:
 
  • char an char anhängen Beitrag #11
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Das Problem steht doch da. Der String ist nicht Null-terminiert. Das wird vermutlich daran liegen, dass du anscheinend mit strcat versuchst, etwas an die nicht initialisierte Variable szPath anzuhängen. Du könntest z.B. den ersten String per strcpy o.ä. in szPath kopieren, dann ist das Null-terminiert.
 
  • char an char anhängen Beitrag #12
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
kannst du mir ein Beispiel schreiben???:ja:
Bitte, ich checks net....

Code:
strcat_s (szPath, 260, "\\Seifenblase.bmp\0");
\0 hängt doch eine 0 ans Ende??? oder nicht???
 
  • char an char anhängen Beitrag #13
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
strcat hängt an der Stelle des Null-Characters im ersten String szPath den neuen String an. Wenn in szPath aber nirgendwo ein Null-Character steht, dann findet er keine Stelle, an der er den String anhängen kann. Du musst also szPath irgendwie initialisieren, z.B. mit szPath[0] = 0; dann sollte es gehen.
 
  • char an char anhängen Beitrag #14
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
eher nicht:
1>c:\dokumente und einstellungen\max\eigene dateien\visual studio 2008\projects\desktop_ändern\desktop_ändern\main.cpp(7):
error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.
 
  • char an char anhängen Beitrag #15
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Komisch, bei mir geht das wunderbar.
Ganz einfach zu Demonstrationszwecken:
Code:
#include "stdafx.h"
#include "string.h"
#include "tchar.h"
#include "conio.h"
#include "stdio.h"

#define MAXPATH 256

int main(int argc, char* argv[])
{
	TCHAR szPath[MAXPATH];
	
	printf("%s\n", szPath);

	szPath[0] = 0;
	printf("%s\n", szPath);

	strcpy(szPath, "Hallo");
	printf("%s\n", szPath);

	strcat(szPath, " Welt!");
	printf("%s\n", szPath);

	_getch();

	return 0;
}
.
Bei der ersten Ausgabe erscheint nur Blödsinn, weil der Speicher nicht initialisiert ist, bei der zweiten ein leerer String, weil das erste Zeichen der Null-Character ist, bei der dritten "Hallo" und bei der vierten "Hallo Welt!".
 
  • char an char anhängen Beitrag #16
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Max, wenn das oben alles an Code ist, dann hast Du vergessen, die Konstante MAXPATH zu setzen.
 
  • char an char anhängen Beitrag #17
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
MAX_PATH sollte eigentlich durch #include <windows.h> definiert sein. So irgendwas um die 200 herum.

@Max
Schreib doch einfach
TCHAR szPath[MAX_PATH] = { "" };

Dann ist szPath nullterminiert und das Programm sollte gehen.
 
  • char an char anhängen Beitrag #18
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Okay, ich schau mal...:ja::goil:
Danke für die Beispiele, hoffentlich funzts jetzt...

MAX_PATH ist 260 nur so zur Info...

@ cmddegi
error C2664: 'strcat': Konvertierung des Parameters 1 von 'TCHAR [260]' in 'char *' nicht möglich
 
  • char an char anhängen Beitrag #19
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Scheinbar hat dein Compiler bisweilen andere Ansichten als meiner.
Aber auch das ist kein Problem: Wenn die Funktion ein char* will, dann gibt man ihr eben einen ;)
Code:
strcat(&szPath[0], " Welt!");
sollte gehen.
 
  • char an char anhängen Beitrag #20
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Danke an alle, für eure Hilfe!
Nun geht's:app::app::app::app::app:

Und ich erfreue mich eines Neuen Desktop-Hintergrundes...:grinning:


dieser Code funzt sogar bei mir:grinning::
Code:
#include <windows.h>
#include <string.h>


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	char szPath[MAX_PATH] = { "" };
	char szBild[MAX_PATH]="\\Seifenblase.bmp";
	char szWindir[MAX_PATH];
	
	GetEnvironmentVariable("windir", szWindir, sizeof(szWindir));
	

	strcat (&szPath[0], szWindir);
	strcat (&szPath[0], "\\Seifenblase.bmp");
	strcat (&szPath[0], "\0");

	SystemParametersInfo(
		SPI_SETDESKWALLPAPER,
		0,
		szPath,
		SPIF_SENDCHANGE|SPIF_UPDATEINIFILE);

}

Ein riesiges Dankeschön jetzt noch an:
cmddegi
UnimatrixZero
O Love
und FerFemNemBem
 
Zuletzt bearbeitet:
Thema:

char an char anhängen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben