На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Работа со структурами+strcpy , из char в char
    Добрый день.
    Помогите разобраться! Уже пролазил в поиске, но даже точно не знаю, где искать.
    ExpandedWrap disabled
      #include <stdio.h>
      #include <string.h>
      #define NAME_SIZE 256
       
      typedef struct {
              int id;
              char name[NAME_SIZE];
              } Data;
      int main(){
          Data postoi[100];
          printf("Vvedite nomer");
          scanf("%d", &postoi->id);
          printf("Vvedite bykvi");
          scanf("%s", postoi->name);
          printf("%d%s", postoi->id, postoi->name);
          printf("Zapisano v stryktyry postoi\n");
          
          char tempa[NAME_SIZE];
          tempa = *postoi->name;
          // strcpy(tempa, postoi->name); эта строка в Visual Studio не катит
          
          
          printf("Perezapisano vo vremenyu peremenyu, %s\n", tempa);
          Data vremennai[100];
          strcpy(vremennai->name, tempa);
          printf("Zapisano v novyu stryktyry%s\n", vremennai->name);
          
          
          int p;
          scanf("%d", &p);
          
          return 0;
          }


    Суть проблемы, хочу записать из структуры символы в переменную, потом из переменной, переписать символы в новую структуру.
    На этот код компилятор выдаёт :
    incompatible types in assignment of `char' to `char[256]'

    У меня по ходу проблема с осознанием значений указателей и адресов...Подскажите, как правильно выполнить копирование. И правильно ли здесь используются указатели?
      Начни с прочтения какой-нибудь книжки.
      Здесь проще сказать что правильно, чем что неправильно - неправильно практически всё.

      Добавлено
      Цитата muskos @
      tempa = *postoi->name;

      Вместо этого должно быть:
      ExpandedWrap disabled
        strncpy(tempa, postoi[N].name, sizeof(tempa));
        tempa[sizeof(tempa)/sizeof(tempa[0])-1]=0;

      или просто
      ExpandedWrap disabled
        strncpy(tempa, postoi[N].name, 100);
        tempa[99]=0;

      Где N - индекс элемента массива с которым ты хочешь работать.
        Ты пишешь:
        ExpandedWrap disabled
          tempa = *postoi->name;

        tempa имеет тип char*, postoi->name имеет тип char*, но ты это дело разыменовываешь и получаешь char. Стоит ли удивляться, что компилятор выдает ошибку?
          awax, какой строчкой я это делаю?:(
            Той, что находится перед закомментированной :D
            Закомментируй ее, а ту что закомментирована, разкомментируй.
            Сообщение отредактировано: awax -
              Я хотел вот cppasm'у сказать ещё...
              строчка strcpy в визуал студио не работает(
              В деве без того, что awax называет разименовать, работает нормально. Т.е. если раскоментить строчку и убрать разименовывание...
              Так а что делать?:( Как сделать, что бы заработало?

              Добавлено
              Там суть вообще, надо сделать пузырьковым методом...Это всё товарисчу. у него не получается сохранить строку из структуры в отдельную строку, что бы потом отпузырить её и удалить...
                Закомментируй ее, а ту что закомментирована, разкомментируй.
                  в Devc++ работает
                  в Microsoft Visual Studio2008 не работает
                    Компилируется?
                      Цитата muskos @
                      strcpy(tempa, postoi->name);

                      Вот это не работает, postoi - это массив, а не структура.
                      У него нету поля name.
                      Замени на strcpy(tempa, postoi[0].name);
                      Но лучше так как я написал выше.
                        to awax сорри, что долго у самого вс нету(
                        error C3861: 'strcpy': identifier not found
                        вот что ругает на эту строчку...
                        может есть другой подход...Опишу суть задания и логику...

                        Саздаём файл, в него записываем структуры...там к примеру имя фамилия и номер...
                        надо прочитать из файла...это готово.
                        надо записать в файл...это готово.
                        надо удалить из файла...фатал
                        надо переписать в файле....фатал.
                        Начал с удалить...

                        У чувака логика...
                        Считываем структуры из файла.
                        Узнаём с консоли номер строки для удаления.
                        Потом сортируем пузырьковым методом, что бы структура оказалась последней в массиве.
                        Записываем всё назад в файл, без последней структуры.

                        И вот он меня спрашивает...надо переписать структуру во временную переменную, для пузырька. Сам я с методом не знаком.
                        Я пытался реализовать перепись структуры во временную переменную. Он говорит, что целые числа переписывает на легке, а вот с чарами трабл.

                        ПС НИКИТА ЗАРЕГЕСТРИРУЙСЯ НА ФОРУМЕ И САМ ПЕЧАТАЙ БУКВИ!!!

                        Добавлено
                        cppasm спасибо, ща пробую!

                        Добавлено
                        тупо в вижуал Си не пашет STRCPY функция из string.h

                        Добавлено
                        а я вообще решил выбрать цветы в векторе для пригласительного на свадьбу с моей невестой)
                          Цитата muskos @
                          error C3861: 'strcpy': identifier not found

                          #include<string.h> есть?

                          Цитата muskos @
                          И вот он меня спрашивает...надо переписать структуру во временную переменную, для пузырька.

                          Ты не всю структуру переписываешь, а только строку из неё.
                            to cppasm
                            да, подкручиваю я библиотеку эту...
                            microsoft visual studio 2005 или 2008 стоит...

                            2)Да я понял, что только эту строку...так я и пытаюсь реализовать сохранение текста из строки во временную переменную
                              ExpandedWrap disabled
                                #include <stdio.h>
                                #include <string.h>
                                #include <stdafx.h>
                                #define NAME_SIZE 256
                                typedef struct {
                                                int id;
                                                char name[NAME_SIZE];
                                        } Data;
                                int main(){
                                    Data postoi[100];
                                    for (int i=1;i<4;i++){
                                    printf("Vvedite nomer");
                                    scanf("%i",&postoi[i].id);
                                    printf("Vvedite bykvi");
                                    scanf("%s",postoi[i].name);
                                    }  
                                 
                                    char temp[NAME_SIZE];
                                    temp=postoi[1].name // Вопрос в этой строчке
                                        postoi[1].name=postoi[2].name // И в этой.
                                    printf("Perezapisano vo vremenyu peremenyu, %s\n", temp);
                                    
                                    
                                    int p;
                                    scanf("%d", &p);
                                    
                                    return 0;
                                    }


                              Мой вопрос как правильно переменной temp присвоить значение поля name из структуры и postoi[1].name=postoi[2].name и это правельно написать.
                                Nik198, гугли strcpy(). И прочитай уже хотя бы одну книжку по С.

                                Добавлено
                                muskos, вдруг у тебя там "с" русская? Ггг :) Если у тебя крутая студия, как ты говоришь, то ставь Visual Assist последний какой-нибудь, наводи курсор на strcpy() и брякай кнопку "Go". Она тебе файл покажет, в каком она описана, его и заинклудишь.
                                  to spyтолько в студии сдавать надо лабы) да ладно) я с указателями с большего разобрался) думаю всё получится) сегодня уже не то время, что бы думать) подумаю завтра)
                                  Спасибо всем за помошь)
                                    Цитата
                                    Мой вопрос как правильно переменной temp присвоить значение поля name из структуры и postoi[1].name=postoi[2].name и это правельно написать.

                                    Temp - это просто указатель на первый элемент массива длиной NAME_SIZE!!! Такая же ситуация и для postoi[1].name!!! Поэтому, когда ты пишешь
                                    ExpandedWrap disabled
                                      temp=postoi[1].name

                                    то это означает, что ты просто присвоил адрес массива name переменной, где до этого был адрес массива temp, при этом действительный адрес начала массива temp безвозвратно теряется. Т.е. теперь temp указывает на массив name и может создаться иллюзия, что произошло копирование массива name в массив temp. Но это не так!!!
                                    Для того, что бы копирование действительно произошло тебе надо "ручками" в цикле каждый элемент массива name скопировать в соответствующий элемент массива temp, или не изобретать велосипед и воспользоваться одной из специально предназначенных для этого функций (strcpy, strncpy), пример использования которых тебе любезно продемонстрировал cppasm.
                                      muskos, Visual Assist - это аддон к студии. Очень удобная штука.
                                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                      0 пользователей:


                                      Рейтинг@Mail.ru
                                      [ Script execution time: 0.0893 ]   [ 15 queries used ]   [ Generated: 28.04.26, 09:52 GMT ]