Forum: PC-Programmierung *Tempor abspeichern


von hausmeister krause (Gast)


Lesenswert?

Hallo ich hab auf mein My Programm eine Funktion erstellt

void datenspeicherntempo::init (const char * x)
{
  memset(m_arr,0,ARRSIZE * sizeof(int));
  char *tmp = char *x;

  while ( *tmp != '\0' )
  {
    setdatenspeicher(*tmp);
    tmp++;
  }
}

lässt sich aber nicht übersetzen

von Peter (Gast)


Lesenswert?

elso mit den paar infos würde ich als compiler auch nicht übersetzen.

Das sieht aber schon sehr übel aus!
> char *tmp = char *x;

char *tmp = x;

von Sven P. (Gast)


Lesenswert?

Das ist richtig, das lässt sich so nicht übersetzen.

von hausmeister krause (Gast)


Lesenswert?

im Buch Tips und Triks ist es so drinnen

void datenspeicherntempo::init (const char * x)
{
  memset(m_arr,0,ARRSIZE * sizeof(int));
  char *tmp = (char*) x;

  while ( *tmp != '\0' )
  {
    setdatenspeicher(*tmp);
    tmp++;
  }
}


da funktionierts dann auch aber das versteh ich nicht

von mr.chip (Gast)


Lesenswert?

> Das ist richtig, das lässt sich so nicht übersetzen.

Tolle Antwort, was?

von Lukas (Gast)


Lesenswert?

ich würde das so machen

const char *tmp = x;

von zwieblum (Gast)


Lesenswert?

char *tmp = char *x;
char *tmp = (char*) x;

wer findet den unterschied ? ;-)

von Loke (Gast)


Lesenswert?

ja was ist der Unterschied

von Klaus W. (mfgkw)


Lesenswert?

An den Klammern wirds kaum liegen, die sind doch meistens überflüssig, 
oder?

von Klaus W. (mfgkw)


Lesenswert?

Lukas schrieb:
> ich würde das so machen
>
> const char *tmp = x;

Dann könnte es beim Aufruf von setdatenspeicher() knirschen,
zumindest beim Kompilieren.
Nämlich dann, wenn dort kein const char* verlangt wird.
Ohne deinen Vorschlag und dem Cast (wenn er denn die Klammern
spendiert) würde es glatt kompilieren und vielleicht zur Laufzeit
schief gehen; vielleicht ist ihm das ja lieber.

von Klaus W. (mfgkw)


Lesenswert?

mr.chip schrieb:
>> Das ist richtig, das lässt sich so nicht übersetzen.
>
> Tolle Antwort, was?

Naja geht so. Man kann es sehr wohl übersetzen; z.B. ins Englische.

von Loke (Gast)


Lesenswert?

ich denk mal er hats deswegen so gelöst weil
sich ein const char *x
nicht in ein char *temp zuweisen lässt

von Loke (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:
> Lukas schrieb:
>> ich würde das so machen
>>
>> const char *tmp = x;
>
> Dann könnte es beim Aufruf von setdatenspeicher() knirschen,
> zumindest beim Kompilieren.

leicht möglich.

Aber dann ist die Lösung den cast einfach wegzucasten, keine wirkliche 
Lösung sondern ein Schuss ins Knie.

Ich bezweifle aber, dass es an setdatenspeicher hängen wird. So wie es 
asussieht, übernimmt die einen char per value, und dann passt das schon.
1
void datenspeicherntempo::init (const char * x)
2
{
3
  memset(m_arr,0,ARRSIZE * sizeof(int));
4
5
  while ( *x != '\0' )
6
  {
7
    setdatenspeicher(*x);
8
    x++;
9
  }
10
}

von zwieblum (Gast)


Lesenswert?

> An den Klammern wirds kaum liegen, die sind doch meistens überflüssig,
oder?

nö, sind sie nicht :-)

von hausmeister krause (Gast)


Lesenswert?

so wie karl heinzes beschrieben hat so ist es auch
ich habs auch so gemacht aber er hat es schon richtig beantwortet

von Karl H. (kbuchegg)


Lesenswert?

Hab mir meinen Beitrag noch mal durchgelesen. Da ist ein Tippfehler 
drinnen, der zu einem Missverständnis führen könnte.

Es muss lauten:

Aber dann ist die Lösung den const einfach wegzucasten, keine 
wirkliche
Lösung sondern ein Schuss ins Knie.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.