這裏有兩個小程序,第一個返回正確的結果,第二個不是。他們看起來和我差不多,但爲什麼第二個程序返回錯誤的結果? 我的意思是測試函數應該打印與main相同的值,但在第二個程序中它不打印。memcpy錯誤int複製回
節目#1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include<stdint.h>
int test(const char *buf)
{
printf("TEST HERE\n");
int c = 33;
int d = 44;
memcpy(&c, &buf+1, 4);
memcpy(&d, &buf+5, 4);
printf("c is %d\n", c);
printf("d is %d\n", d);
}
int main()
{
char *buf = malloc(100);
char buf2[100];
int a = 11;
int b = 22;
int c = 33;
int d = 44;
int i;
for(i = 0; i < 100; i++)
{
buf[i] = 0;
buf2[i] = 0;
}
buf[0] = 127;
memcpy(buf+1, &a, 4);
memcpy(buf+5, &b, 4);
memcpy(&c, buf+1, 4);
memcpy(&d, buf+5, 4);
printf("c is %d\n", c);
printf("d is %d\n", d);
memcpy(&buf2+1, &a, 4);
memcpy(&buf2+5, &b, 4);
memcpy(&c, buf+1, 4);
memcpy(&d, buf+5, 4);
printf("c is %d\n", c);
printf("d is %d\n", d);
test(buf);
test(buf2);
}
節目#2
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include<stdint.h>
int test(const char *buf)
{
printf("test here\n");
int b = 55555;
int d = 55555;
memcpy(&b, &buf+1, 4);
memcpy(&d, &buf+5, 4);
printf("b is %d\n", b);
printf("d is %d\n", d);
return 0;
}
int main()
{
int a = 11;
int b = 22;
int c = 33;
int d = 44;
char buf[100];
int i;
for(i = 0; i<100;i++)
{
buf[i] = 0;
}
memcpy(&buf+1, &a, 4);
memcpy(&buf+5, &c, 4);
memcpy(&d, &buf+5, 4);
memcpy(&b, &buf+1, 4);
printf("b is %d\n", b);
printf("d is %d\n", d);
test(buf);
return 1;
}
程序1輸出:
c is 11
d is 22
c is 11
d is 22
TEST HERE
c is 1
d is 22
TEST HERE
c is 1
d is 22
程序2輸出:
b is 11
d is 33
test here
b is -1056904720
d is 0
後"test here"
乙方應11
d應該是33
感謝誰可以回答這個問題!
你爲什麼不解釋的區別是什麼,都在源代碼和結果中。 –