Модератор: Модераторы разделов
Gang
Сообщения: 106
Сообщение
Gang » 16.05.2007 16:02
Вот не пойму:
Код: Выделить всё
#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
Сообщение
BlackStar » 16.05.2007 16:11
Код: Выделить всё
#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
Сообщение
Gang » 16.05.2007 16:26
Спасибо, этот простой пример работает, но вот реальная задача вываливается с ошибкой сегментирования:
Код: Выделить всё
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
Сообщение
BlackStar » 16.05.2007 16:46
Во-первых fopen при ошибке открытия возвращает NULL, а не -1; во-вторых fscanf(fpt,"%s",&b->com_port) - ты пытаешься прочитать строку в символ (char).
LightLang Team
Gang
Сообщения: 106
Сообщение
Gang » 16.05.2007 16:51
BlackStar писал(а): ↑ 16.05.2007 16:46
Во-первых
fopen при ошибке открытия возвращает NULL, а не -1; во-вторых
fscanf(fpt,"%s",&b->com_port) - ты пытаешься прочитать строку в символ (char).
Да действительно
Большое спасибо )
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux
Сообщение
deninok » 17.05.2007 10:38
Код: Выделить всё
#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
Сообщение
georgy_sh » 17.05.2007 12:44
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
Сообщение
deninok » 17.05.2007 15:54
Да, He1mut , ты прав. Проверил, скомпилировалось.