Tüm kodlarımı yazdığım Ubuntu'da sorunları olmayan bir üniversite projesi için bazı C kodu yazdım. İşaretlendiğinde öğretmen çıktı üretmediğini söyledi. Yine de benim için çalışıyor, ancak Windows'da çalıştırdığımda kodumun bozulduğunu bulduğumda, öğretmenin Windows'da kodumu çalıştırdığına dair şüphem doğru çıktı. Sorunu çözdüm. (I Daha sonra, örneğin, içeren başka bir karakter dizisi (char grade_str[3]
) içeriğini alırC dizisi Windows & Ubuntu üzerinde farklı bir şekilde ele alındı
char grade[2];
, "B3", içine kopyalanır:
I karakter dizisi vardır: Aşağıdaki oldustrcpy(grade, grade_str);
dize grade
(sözde şimdi eşit "B3") için notlarının tam bir dosyaya karşılaştırılır() strcmp
kullanarak bir maç almak için) bu bir hata farkındayım. Windows'da (tam olarak 7) dışında, asla eşleşmez, çünkü grade
Bu, "B30 ~ $" gibi bir şeye benziyor. Dizi sadece 2 bayt olduğundan, bu olmamalı. Sorunun neredeyse hem dize hem de boş bir bayt için yeterli alan sağlamamasından ve char grade[3];
'un gerçekten durumu düzeltmesinden kaynaklandığını biliyorum. Bununla birlikte, Windows veya Ubuntu'da derleme yaparken neden hata yapamadığımı ve neden her zaman Ubuntu'da her zaman mükemmel çalıştığını bilmek istiyorum. Şu andan itibaren Windows VE Linux'taki kodumu kontrol etmek zorunda kalacağımı hissediyorum ... ya da bu hataların derleyici tarafından düzgün bir şekilde yükseltildiğinden emin olmanın bir yolu var mı, bir çeşit süper uyanık mod? kullanılan
Derleyiciler:
- Ubuntu: gcc sürüm 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2)
- Windows 7: Sadece bu yüzden oldukça emin, bunu güncellenmiş mingw32 gcc 4.7
O Ok C – wRAR
, teşekkür gibi dillerde derleme sırasında tüm bellek erişimi hataları yakalamak imkansızdır. Mümkün olduğunu düşünürdüm ... Şimdi bu soruyu sileceğim, yani eğer başka birinin aynı sorusu varsa, tekrar tekrar sormak zorunda kalacaklar. – Totem
Gösterilen başlangıç yok. char notu [2]; 'sadece bir beyan veya geçici bir tanımdır. Bir char [2] '2' char's bir dizi, ama 3 'chars' harekete! – Olaf