Ja, die ints hab ich vergessen... Btw: für ISO C90 (selten, aber trotzdem erwähnenswert) sollte das int i vor dem ersten for und nicht im for drin stehen.
Bezgl. Fehlermeldung: Compiler, Version; Betriebssystem, Version?
edit: gcc meckert wegen dem int i im for auch ohne auf strict ansi gesetzt zu sein... damit's wirklich ISO C90 (ANSI C89) ist, müsste noch der //-Kommentar durch einen /* */-Kommentar ersetzt werden.
So kompilierts mit
Code:
gcc -Wall -Wextra -ansi -pedantic -o mcmp mcmp.c
(gcc 4.4.5) ohne Warnungen:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct s {
int x;
short y;
int z;
}; /* memory layout: bytes 0-3: x, 4-5: y, 8-11: z */
int main()
{
/* all variable declarations need to be at begin of block (for -pedantic) */
struct s *array = calloc(10, sizeof(struct s));
struct s *array2 = calloc(10, sizeof(struct s));
int i;
for (i = 0; i < 10; i++) {
array[i].x = i;
array[i].y = 2*i;
array[i].z = 3*i;
}
for (i = 0; i < 10; i++) {
array2[i].x = i;
array2[i].y = 2*i;
array2[i].z = 3*i;
}
if (memcmp(array, array2, 10*sizeof(struct s)) != 0) {
printf("contents of array and array2 are not equal!\n");
} else {
printf("contents of array and array2 are equal!\n");
}
array2[3].z = 0;
if (memcmp(array, array2, 10*sizeof(struct s)) != 0) {
printf("contents of array and array2 are not equal!\n");
} else {
printf("contents of array and array2 are equal!\n");
}
return 0;
}
Lesezeichen