Структуры (gcc 4.1.1)

Модератор: Модераторы разделов

Аватара пользователя
Gang
Сообщения: 106

Структуры

Сообщение Gang »

Вот не пойму:

Код: Выделить всё

#include <stdio.h>
struct test_d
{
    int a;
} a1;

void test1(test_d *b){
    b.a=15;
    return 0;
};

int main(void){
    a1.a=21;
    printf("%d",a1.a);
    test1(&a1);
    printf("%d",a1.a);
    return 0;

Объявил структуру, передаю функции, а она какой то бред пишет ...
До етого под винды на борланде все ок было...
Подскажите как под Linux`ом со структурами работать (необходимо читать из файла в структуру) или хоть ссылочку какую - нить...
Заранее благодарен.
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Структуры

Сообщение BlackStar »

Код: Выделить всё

#include <stdio.h>

struct test_d
{
    int a;
} a1;

void test1(struct test_d *b){
    b->a=15;
};

int main(void)
{
    a1.a=21;
    printf("%d\n",a1.a);
    test1(&a1);
    printf("%d\n",a1.a);
    return 0;
}
LightLang Team
Спасибо сказали:
Аватара пользователя
Gang
Сообщения: 106

Re: Структуры

Сообщение Gang »

Спасибо, этот простой пример работает, но вот реальная задача вываливается с ошибкой сегментирования:

Код: Выделить всё

    struct server_config{
        int port;
        char com_port;
    } a;

...
//-----------------------------------------------------

int configuration (struct server_config *b) {
        char test;
        FILE *fpt;

        fpt=fopen("./seriald.conf","r");

        if(fpt==-1)
            perror("Error: can`t open server config file\n");
        fscanf(fpt,"%d",&b->port);
        fscanf(fpt,"%s",&b->com_port);
        printf("pro4el port -%d, com_port - %s\n",b->port,b->com_port);
        return 0;
}




int main (int argc,char *argv[]) {
    configuration(&a);
    printf("%d",a.port);
...
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Структуры

Сообщение BlackStar »

Во-первых fopen при ошибке открытия возвращает NULL, а не -1; во-вторых fscanf(fpt,"%s",&b->com_port) - ты пытаешься прочитать строку в символ (char).
LightLang Team
Спасибо сказали:
Аватара пользователя
Gang
Сообщения: 106

Re: Структуры

Сообщение Gang »

BlackStar писал(а):
16.05.2007 16:46
Во-первых fopen при ошибке открытия возвращает NULL, а не -1; во-вторых fscanf(fpt,"%s",&b->com_port) - ты пытаешься прочитать строку в символ (char).

Да действительно :)
Большое спасибо )
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Структуры

Сообщение deninok »

Код: Выделить всё

#include <stdio.h>
struct test_d
{
    int a;
} a1;

int main(void){
    a1.a = 21;
    ...
    ...
}


Простите, а как это так? Экземпляр структуры test_d не создан, а вы уже обращаетесь к полю... На мой взгляд, яснее будет так:

Код: Выделить всё

#include <stdio.h>
struct test_d
{
    int a;
};

int main(void)
{
    struct test_d d;
    d.a = 21;
    ...
    ...
}

Просто...
Или, если хочется покороче, то так:

Код: Выделить всё

#include <stdio.h>
typedef struct test_d
{
    int a;
} Test;

int main(void)
{
    Test t;
    t.a = 21;
    ...
    ...
}
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Структуры

Сообщение georgy_sh »

deninok писал(а):
17.05.2007 10:38

Код: Выделить всё

#include <stdio.h>
struct test_d
{
    int a;
} a1;

int main(void){
    a1.a = 21;
    ...
    ...
}


Простите, а как это так? Экземпляр структуры test_d не создан, а вы уже обращаетесь к полю... На мой взгляд, яснее будет так:

Так ведь экземпляр создается сразу после объявления класса, он является глобальным.
struct test_d
{
int a;
} a1;
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Структуры

Сообщение deninok »

Да, He1mut, ты прав. Проверил, скомпилировалось.
Спасибо сказали: