warning: operation on "i" may be undefined

Gast #806447
Lesenswert?

Nicht i ist undefiniert, sondern die damit durchgeführte Operation.

i++ wird nach dem Auslesen des Arrays name durchgeführt, aber es ist 
nicht sichergestellt, daß dies erst nach dem Zuweisen an das Array 
header geschieht.
Gast #806464
Lesenswert?

> header[i] = name[i++];

i wird hier zweimal benutzt, links und rechts. Aber es ist nicht 
festgelegt, wann i inkrementiert wird.

Beachte die Reihenfolge:
Fall 1:
  1. Adresse von header[i] merken (= linke Seite auswerten)
  2. Wert von name[i] ermitteln und i erhöhen (= rechte Seite auswerten)
  3. Zuweisung durchführen

Fall 2:
  1. Wert von name[i] ermitteln und i erhöhen (= rechte Seite auswerten)
  2. Adresse von header[i] merken (= linke Seite auswerten)
  3. Zuweisung durchführen

Im zweiten Fall würde "header[i]" schon mit dem erhöhten "i" arbeiten. 
Welcher Fall eintritt, ist eben undefiniert (= zufällig).
#806696
Lesenswert?

Ernst Bachmann wrote:
> Karl heinz Buchegger wrote:
>> Wobei ich mich frage, warum du nicht ganz einfach
>> das für strings vorgesehene strcpy benutzt
>>
>>
1
>>    strcpy( header, name );
2
>>
>
> Weil das ein '\0' am Stringende mitkopiert?

Ich wette um ein Bier mit dir, dass der OP genau das eigentlich
will und nur noch nicht weiß, dass er hier in seiner Version
einen Programmfehler hat.
Gast #806746
Lesenswert?

> Ich wette um ein Bier mit dir, dass der OP genau das eigentlich
> will und nur noch nicht weiß, dass er hier in seiner Version
> einen Programmfehler hat.

Das ist ein Argument. Dagegen würde ich nicht wirklich wetten wollen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren