Научи ме

Програмиране => C/C++ => Темата е започната от: aliench0 в 01 Ноември 2012, 21:58:47

Титла: C++ error: Lvalue required
Публикувано от: aliench0 в 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];
така вече няма грешка, но пък като изпълня програмата ми извежда символи, не текста който съм въвел...

Титла: Re: C++ error: Lvalue required
Публикувано от: Prometheus в 01 Ноември 2012, 22:57:48
Ред 5 тряба да бъде memcpy(b,a,10);
Титла: Re: C++ error: Lvalue required
Публикувано от: MrCroZer в 01 Ноември 2012, 22:58:14
Виж какво правиш ти .

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

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

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

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

Тез масиви за какво са ти ?
Титла: Re: C++ error: Lvalue required
Публикувано от: Prometheus в 01 Ноември 2012, 23:04:07
Аз доколкотао разбрах въвежда текст, затова няма да стане с обикновени променливи.
Титла: Re: C++ error: Lvalue required
Публикувано от: Борис в 02 Ноември 2012, 05:09:57
"Аз доколкотао разбрах въвежда текст, затова няма да стане с обикновени променливи." Просто уникална дума си сътворил прометей :D
Титла: Re: C++ error: Lvalue required
Публикувано от: Prometheus в 02 Ноември 2012, 11:10:55
"Аз доколкотао разбрах въвежда текст, затова няма да стане с обикновени променливи." Просто уникална дума си сътворил прометей :D
и тя е?
Титла: Re: C++ error: Lvalue required
Публикувано от: dracyla в 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. }
Титла: Re: C++ error: Lvalue required
Публикувано от: aliench0 в 02 Ноември 2012, 14:49:31
Благодаря на всички, направих го с strncpy(b,a,10).