Ben printf ile oldukça garip bir şey buldum. NULL işaretçisiyle temel printf davranışı
Benprintf ("%s\n", (char *)NULL);
aşağıdakileri yapın ben bir segfault olsun. Böyle yapınca
Ama:
printf (".%s\n", (char *)NULL);
çıktı ve hiçbir çökme altındadır.
.(null)
Davranış farkının nedenini bilen var mı? Oluşturulan derleme koduna baktığımızda diğer biçim dizeleri bu hile kendilerini ödünç yok oysa
Tanımsız davranışlar, dahil * herhangi bir şeyi * içerebilir. – EOF
[Bu basit yanıt için bu cevabı (bunun bir kopyası olduğunu düşünüyorum)] (http://stackoverflow.com/a/11589443/1287251). Kısa cevap: 'printf ("% s \ n ", ...)' 'NULL'de segfaults olan 'puts'' a dönüştürülür, fakat printf (".% S \ n ", ...)' kullanır "NULL" (null) 'a çeviren asıl' printf 'işlevi. – Cornstalks
Garip/kötü şeyler yapmayı ve garip/kötü şeyler yapmayı durdurun. –