Автор Тема: C++ error: Lvalue required  (Прочетена 1809 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
C++ error: Lvalue required
« -: 01 Ноември 2012, 21:58:47 »
Здравейте, не разбирам много от C++, затова на някои въпросът ми може да им се стори глупав. Имам следния код:
Код: C++
  1. #include<iostream.h>
  2. void main(){
  3. char a[10],b[10];
  4. cin>>a;
  5. b=a;
  6. cout<<b;
  7. }
След като го изпълня получавам грешка на ред 5. - error: Lvalue required
Как да присвоя стойност на променливата b без да получавам грешка?
(това е опростена версия на кода ми, ако искате и самия код ще дам, но грешката идва от присвояването, затова не съм  постнал целия код)

EDIT: На ред 5. самото деклариране по този начин е грешно, видях го в една книга. Направих го така b[10]=a[10];
така вече няма грешка, но пък като изпълня програмата ми извежда символи, не текста който съм въвел...

« Последна редакция: 01 Ноември 2012, 22:41:29 от aliench0 »

Prometheus

  • Гост
Re: C++ error: Lvalue required
« Отговор #1 -: 01 Ноември 2012, 22:57:48 »
Ред 5 тряба да бъде memcpy(b,a,10);

MrCroZer

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 11
  • -Получени: 17
  • Публикации: 411
Re: C++ error: Lvalue required
« Отговор #2 -: 01 Ноември 2012, 22:58:14 »
Виж какво правиш ти .

Създаваш масиви с по 10 елемента - a  и  b .

После казваш че каквото въведеш го записваш в а .

След това масива му даваш да е равен на това което си въвел.

Ако ги направиш обикновенни порменливи, без да са масиви ще ти сработи, зависи какво искаш да правиш.

Тез масиви за какво са ти ?

Prometheus

  • Гост
Re: C++ error: Lvalue required
« Отговор #3 -: 01 Ноември 2012, 23:04:07 »
Аз доколкотао разбрах въвежда текст, затова няма да стане с обикновени променливи.

Борис

  • Гост
Re: C++ error: Lvalue required
« Отговор #4 -: 02 Ноември 2012, 05:09:57 »
"Аз доколкотао разбрах въвежда текст, затова няма да стане с обикновени променливи." Просто уникална дума си сътворил прометей :D

Prometheus

  • Гост
Re: C++ error: Lvalue required
« Отговор #5 -: 02 Ноември 2012, 11:10:55 »
"Аз доколкотао разбрах въвежда текст, затова няма да стане с обикновени променливи." Просто уникална дума си сътворил прометей :D
и тя е?

dracyla

  • Newbie
  • *
  • Благодарности
  • -Казани: 2
  • -Получени: 3
  • Публикации: 29
Re: C++ error: Lvalue required
« Отговор #6 -: 02 Ноември 2012, 12:37:35 »
Здравей ,

По своята същност декларацията по този начин на масив ( char a[10]; ) представлява следното:

- Това нещо отива в стека и там се заделя памет за него
- а е указател към началот на тази памет, затова всички операции, който правиш с указателите са позволени като например а+1 или 1[a]  това ще те ти даде стойността на елемента с индекс 1
- от друга страна декларирано по този начин ти заявяваш че този указател е константен т.е не можеш да применяш адреса към който сочи.

Следователно това няма да сработи b = a ; Предвид че и двете са константи указатели няма как да им промениш адресите.

Решение :

1. използване както беше споменато по горе memcpy(b,a,10);
2. собствена имплементация на обхождане на масивите и копиране на елементите от единия в другия
3. декларираш си един указател и го насочваш към вече въведения масив от символи

Код: C
  1. #include "stdio.h"
  2.  
  3. int main(int argc , char** argv)
  4. {
  5.      char a[10],*b;
  6.      scanf("%s",a);
  7.      b=a;
  8.      printf("%s" ,b);
  9.      return 0;
  10. }

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
Re: C++ error: Lvalue required
« Отговор #7 -: 02 Ноември 2012, 14:49:31 »
Благодаря на всички, направих го с strncpy(b,a,10).
« Последна редакция: 02 Ноември 2012, 17:14:53 от aliench0 »