invalid operands to binary / (have ‘size_t *’ and ‘int’)

0

Hej! Wesołych, siedzę cały dzień w kuchni, ale zastanawia mnie jedna rzecz;
Mam wskaźnik typu size_t na element struktury size_t name_len (tam jest zapisywana wartość zwrócona przez strlen(name)) . I mam funkcję;

int mvprintw(int y, int x, char *fmt, ...);

Chciałam teraz zrobić coś takiego:

int y_center=10, x_center=10;
size_t string_len;
string_len=&starray[index]->name_len;
mvprintw(y_center+3,x_center-string_len/2,stname);
i oczywiście otrzymuję;

> invalid operands to binary / (have ‘size_t *’ and ‘int’)

Jak prawidłowo wyjść z twarzą z takiej sytuacji? Rzutować, zmienić po prostu typ z size_t na int czy jak?
1

Nie bardzo rozumiem pytanie i błąd. To jest twój prawdziwy kod? Bo ja tu widze dzielenie size_t/int a nie (size_t*) o którym piszesz w poście i o którym pisze komunikat błędu. Więc jak to jest?
Dzielenie size_t powinno działać bez problemów. Dzielenie wskaźnika? Nie wiem co chcesz tym osiagnąć...
Jeśli juz byś coś miała rzutować to prędzej na unsigned_int, bo size_t to zwykle alias właśnie na uinta a nie na inta.

0

Nie, to nie jest mój prawdziwy kod. Dobra działa, jeszcze się mylę w tych wskaźnikach. Mam tablicę struktur i chciałam po prostu w funkcjach chciałam to jakoś skrócić zamiast w każdej pisać

printf("%zu\n",struktura[index]->name_len);

to

printf("%zu\n",*string_len);
 ,tylko że przy operacjach arytmetycznych
```c
mvprintw(y_center+3,x_center-*string_len/2,stname)

trochę brzydko to wygląda, nie wiem.... ,ale to chyba najlepszy sposób.

Panie Furious Programming dobrze już tytuł? :)

0
x_center-*string_len/2

Odradzam. Wyknaj kilka osobnych operacji z przypisywaniem do zmiennych o normalnych nazwach. Kompilator to sobie sam zoptymalizuje, ty nie musisz.
Jak zostawsz takiego potworka w kodzie to za 3 dni zmarnujesz 10 min na rozkminienie co to w ogóle jest, a za tydzień wprowadzając małą poprawkę zrobisz sobie regresje nie do wyśledzenia, bo już teraz jesteś na granicy poprawności ze względu na priorytet operatorów. Takie coś bez nawiasów to jest proszenie sie o guza.

0

Okey dzięki za wskazówkę to tak zrobię. A te nawiasy gdzie miałabym wstawić?

mvprintw(y_center+3,x_center-(*string_len/2),stname)

tutaj? Nigdy nie wstawiałam takich nawiasów, bo to przecież podstawowa kolejność wykonywania działań.

0

O rly? Podstawowa kolejność? Ale przeciez u Ciebie ta gwiazdka to nie jest mnożenie (operator binarny) tylko dereferencja wskaźnika (oprator unarny!) które mają INNY PRIORYTET!
http://nadzieja.el-kfa.net/strony/operators.html
wyobraź sobie że gwiazdka jako operator dereferencji ma priorytet wyższy niż gwiazdka jako mnożenie i niz operator dzielenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1