Niezgodność typów w scnaf

0

Witam, chciałem przedstawić pewien problem związany z błędnym użyciem funkcji scanf.
Oto fragment kodu:

#define DLUGOSC_SCIEZKI_DO_PLIKU 100
void czytaj_z_pliku(void){
    char sciezka[DLUGOSC_SCIEZKI_DO_PLIKU];
...
    scanf("%s", &sciezka);
...

Problem polega na tym że w scanf pierwszy argument oczekuje char*, a drugi (char *)[100].
Jak powinienem to zrobić żeby nie było błędu?
Dziękuje za pomoc.

0

Co znaczy ze oczekuje char*[100]? Że oczekuje wprowadzenia 100 stringów? Lekcja na dziś: pętle.

1

Wg mnie zamiast &sciezka powinno być po prostu sciezka. Szkolny błąd.

0

Dokładny komunikat o błędzie brzmi:**
warning: format ‘%s’ expects type ‘char ’, but argument 2 has type ‘char ()[100]’*

0

sciezka to wskaźnik do pierwszego elementu tablicy. sciezka[0] to pierwszy element tablicy. &sciezka to wskaźnik do wskaźnika do pierwszego elementu tablicy. Trzeba coś więcej tłumaczyć? Usuń tego ampersanda i po zawodach.

0

Z tego co wiem(ale mogę się mylić) to mając char xxx[21]; zapis xxx jest równoważny z &xxx.

@mikoroice90: Wyskakuje Ci ostrzeżenie, a nie błąd. Jakiego kompilatora używasz?

0

używam gcc bo program jest pisany pod linuksem
Problem rozwiązany.
Wibowit miał rację.

Dzięki serdeczne

0

Masz jeszcze jeden problem - scanf("%s", ...)

pod Linuksem jest dostępna fajna wersja getline():

char *napis = NULL;
int dlugosc;
getline(&napis,&dlugosc,stdin);

napis zostanie automatycznie zaalokowany, a jego długość zapisana do zmiennej dlugosc. znak końca linii '\n' pozostanie na końcu napisu.
jest jeszcze getdelim(), w którym można ustawić inny niż enter znak separatora.

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