LINUX.ORG.RU

траблы с указателями


0

0

struct data{void *data;int size}
struct timeval curtime;
data value;

value.data = malloc(4);
value.size = 4;

gettimeofday(&curtime,NULL)


memcpy(value.data,&curtime.tv_sec,4);

syslog(LOG_INFO,"-------------------- %d # %d,%d -----------------",curtime.tv_sec,(long)value.data,value.size);

$ ./a.out

-------------------- 1107179950 # 134561782,4 -----------------

Похоже, в структуру адрес а не значение заносится... Где я ошибся?
anonymous

в printf'е: (long)value.data - ты вывел адрес. А надо значение указателя ( (long)*(value.data))Кстати, зачем все эти маллоки, нельзя сразу в структуре написать long data ?

Krasu
()
Ответ на: комментарий от anonymous

зачем такие извращенства ? :)

[ckult@localhost tmp]$ cat 10.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

typedef struct
{
    void *data;
    int size;
}data;

int main()
{
    struct timeval curtime;
    data value;

    value.data = malloc(4);
    value.size = 4;

    gettimeofday(&curtime, NULL);

    memcpy(value.data, &curtime.tv_sec, 4);

    printf("%d # %d,%d\n", curtime.tv_sec, *(long*)(value.data), value.size);

    return 0;
}

[ckult@localhost tmp]$ gcc -o 10 ./10.c
[ckult@localhost tmp]$
[ckult@localhost tmp]$ ./10
1107182028 # 1107182028,4

******************************************

Но, лучше имхо, убрать маллок. и void *data заменить на long data :)

Krasu
()
Ответ на: комментарий от Krasu

Вот я лупень 8) Спасибо, все работает 8)))

anonymous
()

фтопку си!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.