wskaźnik i scanf

0

char *a;
scanf("%s", a);
Czy to wyrażenie jest poprawne?

char *a;
a = "HELO WORLD";
A czy to wyrażenie jest poprawne?

0

Moim zdaniem to nie jest poprawne poniewaz dlla char używa sie %c a nie %s ale nie wiem jestem dopiero na poczatku zabawy z C

0

char *a;
scanf("%s", a);
Czy to wyrażenie jest poprawne?

char *a;
a = "HELO WORLD";
A czy to wyrażenie jest poprawne?

W pierwszej części deklarujesz wskaźnik na zmienną znakową i próbujesz czytać do tej zmiennej przy pomocy scanf (%s czy %c to tylko kwestia interpretacji), owszem do scanf należy podać adres zmiennej (wskaźnik jest adresem), ale Twój wskażnik nie wskazuje na nic - wcześniej powinieś albo wskazać wskaźnikiem na jakąś zmienną, albo zaalokować dla wskaźnika pamięć.

Drugie - to samo, musisz najpierw albo wskaźniekiem wskazać na jakąś zmienną, albo zaalokować dla niej pamięć.

0

druga czesc jest kategorycznie zla !!

jezeli masz wskaznik pusty to jezeli wczesniej nie zaalokujesz mu odpowiedniej ilosci pamieci to bedziesz mial wylew czyli core dumped :P

0

To wlasnie pierwsza czesc jest zla. Druga jest jak najbardziej w porzo.

char* a; // << deklaracja wskaznika do char
a = "HELLO WORLD"; // przypisanie wskaznikowi adresu napisu "HELLO..."

0

Niestety jedno i drugie jest źle.

  1. do funkcji scanf parametr a musi mieć już przydzielony rozmiar pamięci
    np.

char a[80]; //albo dynamicznie malloc
scanf("%s", a);

i wtedy będzie poprawne chyba ze ktoś poda więcej niż 79 znaków,
dokładniejsze info możesz znaleźć tutaj http://www.cplusplus.com/ref/cstdio/scanf.html

  1. To wyrażenie będzie poprawne wtedy gdy zainicjujesz zmienna ta wartością czyli : char *a = "HELO WORLD"; w tym momencie kompilator automatycznie przydzieli pamięć na ta wartość.

//Dopisane
na to wygląda ze wyrażenie:
char * a;
a = "hello world";
też jest porawne zadaje się że tak jak mówił Imp wyrażenie ("hello World") jest zpaisywane w segmencie danych a co za tym idzie jest "statycznie" allokowane w pamieci.

0

Pierwsze jest złe to pewne
Drugie moim zdaniem jest OK gdyż jest to wskaźnik do napisu, który assembler i tak musi przechowywać w pamięci.
//dopisane
Przykładem może być:

'
  char c = "sdasdasdA"[1];
  printf("%c", c);

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