Работа со структурами+strcpy
, из char в char
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.116] |
|
|
| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Работа со структурами+strcpy
, из char в char
|
Сообщ.
#1
,
|
|
|
|
Добрый день.
Помогите разобраться! Уже пролазил в поиске, но даже точно не знаю, где искать. ![]() ![]() #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]' У меня по ходу проблема с осознанием значений указателей и адресов...Подскажите, как правильно выполнить копирование. И правильно ли здесь используются указатели? |
|
Сообщ.
#2
,
|
|
|
|
Начни с прочтения какой-нибудь книжки.
Здесь проще сказать что правильно, чем что неправильно - неправильно практически всё. Добавлено Цитата muskos @ tempa = *postoi->name; Вместо этого должно быть: ![]() ![]() strncpy(tempa, postoi[N].name, sizeof(tempa)); tempa[sizeof(tempa)/sizeof(tempa[0])-1]=0; или просто ![]() ![]() strncpy(tempa, postoi[N].name, 100); tempa[99]=0; Где N - индекс элемента массива с которым ты хочешь работать. |
|
Сообщ.
#3
,
|
|
|
|
Ты пишешь:
![]() ![]() tempa = *postoi->name; tempa имеет тип char*, postoi->name имеет тип char*, но ты это дело разыменовываешь и получаешь char. Стоит ли удивляться, что компилятор выдает ошибку? |
|
Сообщ.
#4
,
|
|
|
|
awax, какой строчкой я это делаю?
|
|
Сообщ.
#5
,
|
|
|
|
Той, что находится перед закомментированной
![]() Закомментируй ее, а ту что закомментирована, разкомментируй. |
|
Сообщ.
#6
,
|
|
|
|
Я хотел вот cppasm'у сказать ещё...
строчка strcpy в визуал студио не работает( В деве без того, что awax называет разименовать, работает нормально. Т.е. если раскоментить строчку и убрать разименовывание... Так а что делать? Как сделать, что бы заработало? Добавлено Там суть вообще, надо сделать пузырьковым методом...Это всё товарисчу. у него не получается сохранить строку из структуры в отдельную строку, что бы потом отпузырить её и удалить... |
|
Сообщ.
#7
,
|
|
|
|
Закомментируй ее, а ту что закомментирована, разкомментируй.
|
|
Сообщ.
#8
,
|
|
|
|
в Devc++ работает
в Microsoft Visual Studio2008 не работает |
|
Сообщ.
#9
,
|
|
|
|
Компилируется?
|
|
Сообщ.
#10
,
|
|
|
|
Цитата muskos @ strcpy(tempa, postoi->name); Вот это не работает, postoi - это массив, а не структура. У него нету поля name. Замени на strcpy(tempa, postoi[0].name); Но лучше так как я написал выше. |
|
Сообщ.
#11
,
|
|
|
|
to awax сорри, что долго у самого вс нету(
error C3861: 'strcpy': identifier not found вот что ругает на эту строчку... может есть другой подход...Опишу суть задания и логику... Саздаём файл, в него записываем структуры...там к примеру имя фамилия и номер... надо прочитать из файла...это готово. надо записать в файл...это готово. надо удалить из файла...фатал надо переписать в файле....фатал. Начал с удалить... У чувака логика... Считываем структуры из файла. Узнаём с консоли номер строки для удаления. Потом сортируем пузырьковым методом, что бы структура оказалась последней в массиве. Записываем всё назад в файл, без последней структуры. И вот он меня спрашивает...надо переписать структуру во временную переменную, для пузырька. Сам я с методом не знаком. Я пытался реализовать перепись структуры во временную переменную. Он говорит, что целые числа переписывает на легке, а вот с чарами трабл. ПС НИКИТА ЗАРЕГЕСТРИРУЙСЯ НА ФОРУМЕ И САМ ПЕЧАТАЙ БУКВИ!!! Добавлено cppasm спасибо, ща пробую! Добавлено тупо в вижуал Си не пашет STRCPY функция из string.h Добавлено а я вообще решил выбрать цветы в векторе для пригласительного на свадьбу с моей невестой) |
|
Сообщ.
#12
,
|
|
|
|
Цитата muskos @ error C3861: 'strcpy': identifier not found #include<string.h> есть? Цитата muskos @ И вот он меня спрашивает...надо переписать структуру во временную переменную, для пузырька. Ты не всю структуру переписываешь, а только строку из неё. |
|
Сообщ.
#13
,
|
|
|
|
to cppasm
да, подкручиваю я библиотеку эту... microsoft visual studio 2005 или 2008 стоит... 2)Да я понял, что только эту строку...так я и пытаюсь реализовать сохранение текста из строки во временную переменную |
|
Сообщ.
#14
,
|
|
|
|
![]() ![]() #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 и это правельно написать. |
|
Сообщ.
#15
,
|
|
|
|
Nik198, гугли strcpy(). И прочитай уже хотя бы одну книжку по С.
Добавлено muskos, вдруг у тебя там "с" русская? Ггг Если у тебя крутая студия, как ты говоришь, то ставь Visual Assist последний какой-нибудь, наводи курсор на strcpy() и брякай кнопку "Go". Она тебе файл покажет, в каком она описана, его и заинклудишь. |