[C++] Conversion may lose significant digits

Hier ist fast dasselbe wie toupper() tut (glaub ich zumindest) nur ausprogrammiert:
Code:
char *stringupcase(char *string)
{
	int count1 = 0;
 
	for(count1 = 0; count1 < strlen(string); count1++)
	{
		//Wenn es ein Kleinbuchstabe ist
		if(string[count1] >= 'a' && string[count1] <= 'z')
		{
			string[count1] = string[count1] - 32;
		}
	}
 
	return string;
}

PS: Probier mal bei der Deklaration von c das unsigned int nur in int zu lassen.

Und poste mal dein gesamtes Programm
 
>PS: Probier mal bei der Deklaration von c das unsigned int nur in int zu lassen.
Mag der Kompiler noch weniger.

>Und poste mal dein gesamtes Programm
Ich habe es auf das hier runtergebrochen:
Code:
//-------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <ctype.h>

void stringupcase(char*);	//STRINGS in Großbuchstaben umwandeln

//* Hauptprogramm
int main()
{
	char satz[100]="set date 24.12.2005 11:11:12";

   stringupcase(satz);
   printf("\nSatz[up]: [%s]",satz);
}



//STRINGS in Großbuchstaben umwandeln
//-----------------------------------
void stringupcase(char *Text)
{
   unsigned int c;
   for (c=0; c<strlen(Text); c++)
   	{Text[ c]=toupper(Text[ c]);}
}

Info :Building...
Info :Compiling D:\Daten\intern\Dirk\a.CPP
Warn :  a.CPP(24,14):Conversion may lose significant digits
Info :Linking D:\Daten\intern\Dirk\a.exe
 
Hy!

Habe gerade versucht den Source zu kompilieren, bei mir geht's ohne Warnung oder Error, funktioniert auch (VS 2003 Academic, und VS 2005 Beta)

Versuch's mal so zu kompilieren, da ist der strlen Aufruf raus, bei dem er ja auch seine Warning gibt:
Code:
void stringupcase(char *Text)
{
	unsigned int c;
	for( c = 0; Text[ c] != 0; c++)
		Text[ c] = toupper( Text[ c]);
}

mfg
uhu01
 
Hy!

Was von dem Code ist denn in Zeile 24 Spalte 14?
Wenn ichs zu mir kopiere es das Text[ c ] aus der Schleife, an dem aber nichts falsch sein sollte.

Aber noch eine andere Idee. Die Fehlermeldung besagt ja, das ein Datentyp in einen andern gecastet wird, welcher einen geringeren Wertebereich hat (Wenn ichs richtig interpretiert hab). Also Versuch doch mal c als char zu definieren, da gibst es nichts kleineres mehr.

mfg
uhu01
 
>Was von dem Code ist denn in Zeile 24 Spalte 14?
Code:
TEXT[ c]=toupper(TEXT[ c]);


>Also Versuch doch mal c als char zu definieren, da gibst es nichts kleineres mehr.
Habe ich auch schon durch, bringt nichts.

Aber wenn ich die Problemzeile ändere zu:
Code:
TEXT[ c]=TEXT[ c];


Kommt keine Warnung mehr. Dann müßte es doch an TOUPPER liegen. Oder?
 
Hy!

Ja, sollte es, aber da toupper einen char übergeben haben möchte und einen char zurückgibt sollte keine Warnung auftreten.
Letzte Variante:
Sag dem Compiler das du wirklich chars haben möchtest, also
Code:
Text[ c] = (char)toupper( (char)Text[ c]);

sonst hab ich auch keine Idee mehr. :suspekt:

mfg
uhu01
 
Code:
>Text[ c] = (char)toupper( (char)Text[ c]);


Hee, Hoo, :)
Das war es. Jetzt funktioniert es ohne Warnung.

Danke für Deine Arbeit
Gruß
Mark
 
Hy!

Hab doch gern geholfen
Versuch mal einen der beiden Casts wegzugeben, würde mich interessieren woran es gelegen hat.

thx im vorraus
mfg
uhu01
 
Zurück