Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dynamic struct, помогите с кодом 
V
    Опции темы
kostay
Дата 19.1.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



пишет 4то в методе филл ошибка, при выполнении выходит за пределы занетой памети
Код

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 3

struct TestStruct{
    int myint;
    float myfloat;
    char mystring[10];
};

void fill(struct TestStruct *testStruct){
    char buff[10];
    
    printf("\nint: ");
    gets(buff);
    sscanf(buff, "%d", testStruct->myint);
    printf("\nfloat: ");
    gets(buff);
    sscanf(buff, "%f", testStruct->myfloat);
    printf("\nstring: ");
    gets(buff);
    sscanf(buff, "%s", testStruct->mystring);
}
void print(struct TestStruct *testStruct){
    int i;
    printf("\nAnnetut tiedot: \n");
    for(i = 0; i < SIZE; i++){
        printf("int: %d, float: %f, string: %s\n", 
        testStruct->myint, testStruct->myfloat, testStruct->mystring);
    testStruct++;
    }
}

int main(void){
    int i;
    struct TestStruct *ts;
    ts = (struct TestStruct *)malloc(sizeof(struct TestStruct)*SIZE);
    
    //fills struct
    for(i = 0; i < SIZE; i++)
        fill(ts);
        
    //prints struct
        print(ts);
        
    free(ts);
    
    return 0;
}


Это сообщение отредактировал(а) kostay - 19.1.2008, 23:59
PM MAIL   Вверх
JackYF
Дата 20.1.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(kostay @  19.1.2008,  22:58 Найти цитируемый пост)
char buff[10];

а у тебя все вводимые строки меньше 10 символов?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
kostay
Дата 20.1.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



да
PM MAIL   Вверх
codelord
Дата 20.1.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(kostay @  19.1.2008,  19:58 Найти цитируемый пост)

void fill(struct TestStruct *testStruct){
    char buff[10];
    
    printf("\nint: ");
    gets(buff);
    sscanf(buff, "%d", testStruct->myint);
    printf("\nfloat: ");
    gets(buff);
    sscanf(buff, "%f", testStruct->myfloat);
    printf("\nstring: ");
    gets(buff);
    sscanf(buff, "%s", testStruct->mystring);
}


на
Код

 void fill(struct TestStruct *testStruct){
    char buff[10];
    
    printf("\nint: ");
    gets(buff);
    sscanf(buff, "%d", &testStruct->myint);
    printf("\nfloat: ");
    gets(buff);
    sscanf(buff, "%f", &testStruct->myfloat);
    printf("\nstring: ");
    gets(buff);
    sscanf(buff, "%s", &testStruct->mystring);
}




--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
JackYF
Дата 20.1.2008, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(kostay @  19.1.2008,  22:58 Найти цитируемый пост)
printf("\nint: ");
    gets(buff);
    sscanf(buff, "%d", testStruct->myint);
    printf("\nfloat: ");
    gets(buff);
    sscanf(buff, "%f", testStruct->myfloat);
    printf("\nstring: ");
    gets(buff);
    sscanf(buff, "%s", testStruct->mystring);

форматы ввода соответствуют? лог в студию

на какой конкретно строке ругань?

Добавлено через 1 минуту и 1 секунду
а, кажись codelord прав.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
kostay
Дата 20.1.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



ага недогледел, спасибо. но при компиляции gcc
Код

warning: no newline at end of file
/tmp/ccI9vRJQ.o(.text+0x1e): In function `fill':
: the `gets' function is dangerous and should not be used.


+ при распе4атке (print) только первый структ выходит, остальные нули показывают хотя данные были введены
PM MAIL   Вверх
codelord
Дата 20.1.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(kostay @  19.1.2008,  19:58 Найти цитируемый пост)
int main(void){
    int i;
    struct TestStruct *ts;
    ts = (struct TestStruct *)malloc(sizeof(struct TestStruct)*SIZE);
    
    //fills struct
    for(i = 0; i < SIZE; i++)
        fill(ts);
        
    //prints struct
        print(ts);
        
    free(ts);
    
    return 0;
}

на
Код

int main(void){
    int i;
    struct TestStruct *ts;
    ts = (struct TestStruct *)malloc( sizeof(struct TestStruct) * SIZE );

    //fills struct
    for(i = 0; i < SIZE; i++)
        fill(ts+i);

    //prints struct
    for( i =0; i < SIZE; i++)
        print(ts+i);

    free(ts);

    return 0;
}


Добавлено через 4 минуты и 3 секунды
в последнем посте видимо ошибся у тебя принт печатает 
не структуру( а хорошо бы ) а вроде как все
но суть ясна

Добавлено через 6 минут и 55 секунд
т.е функция принт по мне так должна печатать единицу структуры
вроде того, тогда и код предложенный мной чуть выше должен работать адекватно
Код

void print(struct TestStruct *testStruct){
//    int i;
    printf("\nAnnetut tiedot: \n");
//    for(i = 0; i < SIZE; i++){
        printf("int: %d, float: %f, string: %s\n",
        testStruct->myint, testStruct->myfloat, testStruct->mystring);
//    testStruct++;
//    }
}



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
kostay
Дата 20.1.2008, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



int: 1, float: 1.000000, string: 1
int: 1, float: 1.000000, string: 1
int: 1, float: 1.000000, string: 1
thanks!


M
JackYF
не забывай помечать решённой тему.


Это сообщение отредактировал(а) JackYF - 20.1.2008, 11:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.