Podczas czytania this question chciałem przetestować wejście w GCC, aby zobaczyć, jakie błędy będą wyprowadzane. Ku mojemu zaskoczeniu następujący wiersz:W C, czy inicjalizacja macierzy jest traktowana tylko z jednym elementem?
char array[] = {"s"};
kompiluje bez błędu lub ostrzeżenia, powodując szereg wielkości 2 zawierającego "s\0"
. Spodziewałbym się błędu kompilatora, ponieważ prawa strona wyrażenia jest typu char*[]
.
Czy inicjalizacja macierzy z jednym elementem nie jest w tym przypadku traktowana jako tablica i dlaczego?
w szczególności w C można rzeczywiście zainicjować skalary za pomocą {} ... Zastanawiam się jednak, czy ma to jakikolwiek wpływ na wyrównanie. Nie .. nie ma wpływu na wyrównanie :) –
OK. Więc muszę wziąć pod uwagę całe wyrażenie w tym przypadku, a nie tylko lewą stronę?'{" s "}' zdecydowanie nie jest tym samym, co '' s "', na przykład 'char array * [] = {" s "};' jest poprawne, ale 'char array * [] =" s ";' nie jest. – Antoine
jak jest tablica char * [] = {"s"}; ważny? jest to błąd składniowy –