2012-04-21 3 views
5

Czy gwarantuje, że literały ciągów są przechowywane w pamięci?Czy literały łańcuchów sąsiadują z sobą w pamięci?

Dlatego robi poniżej koniecznie dostać wyjście hellohello

printf(3 + "%d"); 
printf("hello"); 
+3

Pierwsze stwierdzenie jest niezdefiniowanym zachowaniem, więc nie masz gwarancji. – GManNickG

+0

Zgodnie z ogólną zasadą, prawie nic nie jest gwarantowane w C i jeśli wygląda źle, to prawdopodobnie nieokreślone zachowanie. – hugomg

+5

Gwarantowane jest wiele rzeczy w C, @missingno. To całe znaczenie Standardu ... – pmg

Odpowiedz

10

Nie, literały ciągów znaków są przechowywane gdziekolwiek swoje fantazje kompilatora. Fakt, że zadeklarowałeś dwa z nich w kolejnych wierszach, jest nieistotny. Nie można założyć, że kompilator je zapisze.

Kompilator może robić różne rzeczy. Na przykład, jeśli piszesz następujący kod

printf("hello"); 
printf("hello"); 

następnie kompilator jest całkowicie na wolności, aby utworzyć tylko jedno dosłowne. Albo nie.

+1

+1 ładny nowy awatar :) – MByD

+0

@BinyaminSharet Dziękuję. To Oddie. –

+0

dzięki za wyjaśnienia i pomoc. Coś na ten temat ze standardów C? – phoxis

Powiązane problemy