String und char addieren
-
Ich dachte an:
string s="Hallo"; char c[2]; s=s+c[1];
Da kommt aber die Meldung das man zwei Zeiger nicht addieren kann..
-
bigborre schrieb:
Da kommt aber die Meldung das man zwei Zeiger nicht addieren kann..
Bei mir nicht. Wie wär's mit einem Grundlagentutorial?
-
string == std::string
?
-
bigborre schrieb:
Ich dachte an:
string s="Hallo"; char c[2]; s=s+c[1];
Da kommt aber die Meldung das man zwei Zeiger nicht addieren kann..
So ganz ohne den Rest ist das nicht zu verstehen. In ein richtiges Programm eingebettet muss folgendes funktionieren:
#include <string> usng namespace std; int main() { string s="Hallo"; char c[2]; s=s+c[1]; }
Ansonsten solltest du ein komplettes möglichst kurzes Programm zeigen, dass dein Problem hat.
-
Also das geht bei mir:
std::string s( "Hallo" ); char c[3] = { ' ', 'D', 'u' }; s=s+c[0]; s=s+c[1]; s=s+c[2]; std::cout << s << std::endl; // Ausgabe: Hallo Du
Schön ist aber auch
std::string s( "Hallo" ); char c[3] = { ' ', 'D', 'u' }; for ( unsigned int idx = 0; idx < sizeof( c ); idx++ ) { s += c[idx]; } std::cout << s << std::endl; // Ausgabe: Hallo Du
Gruß
H.-Gerd
-
hi!
müsste so gehn:
char s[]="Hallo"; string einzeichen = s[0]; string st += einzeichen; const char text[] = "hello world"; string str = text;
fällt euch noch was ein??
cu
-
Funzt irgendwie alles nicht. Hier och mal der Codeschnipsel mir meinem Prob
int SendBytes(unsigned char b[], int lastByte)//sendet Bytes an verbundenen Server { try { string S, D; int i, j; for(j=0;j<lastByte;j++) { S +=(S + "" + b[j]); } D = ("S = " + S); Logbuch (D); i=send( s, b, lastByte, 0 );
-
anstatt
S +=(S + "" + b[1]);
mach mal so:
S.reserve(2 * S.length() + 2); S += S; S += ""; S += b[1];
-
@ssm danke so funktioniert das
-
bigborre schrieb:
@ssm danke so funktioniert das
hättest du deinen Codeschnipsel früher gezeigt, hättest du früher eine Antwort bekommen :p
-
@bigborre
Kann MFK's Aussage eigentlich nochmals aufgreifen, etwas mehr Grundlagenkenntnisse schaden nie.
char, signed char und unsigned char sind 3 unterschiedliche Typen. Und std::string ist als std::basic_string mit Elementtyp char definiert. Deshalb funktioniert bei dir der + Operator auch nicht, da Parameter b vom Typ unsigned char* ist. Was anderes ist es, wenn er vom Typ char* wäre.
Warum funktioniert nun Operator +=? Ganz einfach, unsigned char kann implizit in char umgewandelt werden, unsigned char* in char* hingegen nicht.
-
char, signed char und unsigned char sind 3 unterschiedliche Typen.
nee! es gibt signed char und unsigned char, das blosse char ist nur plattformabhängig und ist im einzelfall signed oder unsigned! so, das wären dann zwei unterschiedlichen typen...
-
chrigi schrieb:
char, signed char und unsigned char sind 3 unterschiedliche Typen.
nee! es gibt signed char und unsigned char, das blosse char ist nur plattformabhängig und ist im einzelfall signed oder unsigned! so, das wären dann zwei unterschiedlichen typen...
es sind trotzdem 3 unterschiedliche typen und nicht etwa ein typedef auf das eine oder das andere. wovon man sich leicht überzeugen kann:
#include <iostream> template< class T > T foo(T& x); template<> unsigned char foo<unsigned char>(unsigned char& x) { return x; } template<> signed char foo<signed char>(signed char& x) { return x; } int main() { signed char a = 'a'; unsigned char b = 'b'; char c = 'c'; std::cout << foo( a ) << foo( b ) << foo( c ); }
führt zu einem linker error: undefined reference to `char foo<char>(char&)'
-
chrigi schrieb:
nee! es gibt signed char und unsigned char, das blosse char ist nur plattformabhängig und ist im einzelfall signed oder unsigned! so, das wären dann zwei unterschiedlichen typen...
Es ist richtig, dass char implementationsspezifiach entweder signed oder unsigned ist. Trotzdem ist es ein separater Typ.
Um den Standard mal zu zitierenIt is implementation-defined whether a char object can hold negative values. Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types.
-
schande über meinem haupt!