"" bir C
Çok acayip şeyler kodumu oluyor geçiriyorum. Bölümü etiketli izlerini bulmuştu inanıyorum "burada" (kod, elbette sadeleştirilmiş):
std::string func() {
char c;
// Do stuff that will assign to c
return "" c; // Here
}
Bir sürü 5 ** Bu işlev sonucu çalıştığımda olacak. Hatta alttaki C belgelerinin adet ve segmentation fault birçok kurtarmayı başardım sanırım. Bu C (stringstream string dönüşümler yapmak için şimdi müracaat ettim) çalışmıyor bu benim için açıktır, ama neden bilmek istiyorum. C çok kullandıktan sonra# uzunca bir süre ve C için , bu bana çok acı verdi.
CEVAP
""bir dize. Bu türü varconst charN dizi. Özellikle bu dize1const chardizisibir öğe null sonlandırıcı olmak.Diziler kolay bir işaretçi gereken ilk unsuru, örneğin ifadelerde işaretçiler içine çürüme.
lhs rhslhsgibi diziler için tanımlı değil verhsolarak tamsayılar. Ama her zamanki işaretçi aritmetiği ile oluşturduğu olarak belirtin ve tamsayılar gibi işaretçiler için tanımlanmış.char(bir tamsayı olarak işlem görür yani) çekirdek C dilinde ayrılmaz bir veri türüdür.
==> dize karakterbu nedenle yorumlanırgösterici tamsayı.
İfadesi "" c Aşağı Yukarı eşit sayılır:
static char const lit[1] = {'\0'};
char const* p = &lit[0];
p c // "" c is roughly equivalent to this expression
std::string bir geri. İfadesi "" c veririşaretçi 21* *için. const char* beklediği std::string oluşturucu null sonlandırılmış bir karakter dizisi için bir işaretçi olmasını bekler.
c != 0 ifade "" c Tanımsız Davranışlara neden olur
c > 1, işaretçi aritmetiği Tanımsız Davranış üretir. İşaretçi aritmetiği sadece diziler tanımlanır ve sonuç ise aynı dizinin bir öğesi.Eğer
charimzalanırsa,c < 0aynı nedenle Tanımsız Davranış üretir.c == 1, işaretçi aritmetiği içindeğilTanımsız Davranış üretmek. Bu özel bir durum, bir dizinin son elemanı son bir elemanı işaret (işaret ne kullanmak için, ama izin verilmez) izin verilir. Halastd::stringkurucu burada adı verilen argüman geçerli bir dizi (ve boş sonlandırılmış bir dize) bir işaretçi olması gerekir beri Tanımsız Davranışlara yol açar. -Son--son öğe dizinin kendisi bir parçası değil. Bu şartı ihlal eden de İK yol açar.
Muhtemelen şu anda ne olduğunu kurucu std::string çalışır belirlemek için boyutu null sonlandırılmış bir dize geçti, aramalar (ilk) karakter dizisi yani eşit '\0':
string(char const* p)
{
// simplified
char const* end = p;
while(*end != '\0') end;
//...
}
bu da erişim ihlaline neden olacak, ya da yarattığı dize içerir "". çöp Derleyici bu Tanımsız Davranış asla olmayacağını varsayar olması da mümkündür, ve garip davranışlara neden, bazı komik iyileştirmeleri.
Bu parçacık için: clang 3.5 emits a nice warning Bu arada
uyarı: ekleme 'char' için bir dize dize ekleme. [-Wstring-plus-int]
return "" c; // Here ~~~^~~not: sessizlik için dizi indeksleme bu uyarı kullanın

&Quot;sıkı" kullanın; JavaScript, ...
Nasıl doğru ActionScript 3 SOAP web se...
Java "-by pass-baÅŸvuru" veya...
Href JavaScript bağlantıları için özni...
&Quot;git verme" ("svn expor...