Es ist bekannt, dass eine nicht initialisierte lokale Variable einen unbestimmten Wert hat und durch die Verwendung von undefiniertem Verhalten aufgerufen wird. Aber führen Operationen wie das Kopieren von Fragmenten mit Zeigern und die Überprüfung auf Gleichheit später auch zu undefiniertem Verhalten?Gleichheitsüberprüfung nach dem Kopieren von Fragmenten von int
Das folgende kompiliert und läuft glatt, aber ich bin unsicher.
#include <stdio.h>
#include <string.h>
int main()
{
int p;
int q = 1;
char *_p = (char *)&p;
char *_q = (char *)&q;
size_t n;
for(n = 0; n < sizeof(int); n++) {
memcpy(_q++, _p++, sizeof(char));
}
if (p == q) {
printf("Equal!!!\n");
}
return 0;
}
Verwenden Sie eine unitäre Variable oder Speicher ist Undefined Behavior. Da Sie aus nicht-entialisiertem Speicher kopieren, sind ja auch alle Operationen, die das Ergebnis dieser Kopie verwenden, Undefiniertes Verhalten. – kaylum