วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

5
เมื่อใดและทำไมต้องใช้คลาสที่ซ้อนกัน?
การใช้การเขียนโปรแกรมเชิงวัตถุเรามีพลังในการสร้างคลาสภายในคลาส (คลาสที่ซ้อนกัน) แต่ฉันไม่เคยสร้างคลาสที่ซ้อนกันในประสบการณ์การเข้ารหัส 4 ปีของฉัน คลาสที่ซ้อนกันมีประโยชน์อย่างไร? ฉันรู้ว่าชั้นสามารถทำเครื่องหมายเป็นส่วนตัวถ้ามันซ้อนและเราสามารถเข้าถึงสมาชิกส่วนตัวทั้งหมดของชั้นนั้นจากชั้นที่มี เราสามารถทำให้ตัวแปรเป็นส่วนตัวในชั้นเรียนที่มีตัวมันเอง เหตุใดจึงสร้างคลาสที่ซ้อนกัน ในสถานการณ์ใดควรใช้คลาสที่ซ้อนกันหรือมีประสิทธิภาพมากกว่าในแง่ของการใช้งานมากกว่าเทคนิคอื่น ๆ ?

7
วิธีการจัดการข้อยกเว้นที่ไม่สามารถจัดการได้? (ยุติแอปพลิเคชั่น vs. รักษาชีวิต)
แนวปฏิบัติที่ดีที่สุดคืออะไรหากมีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นในแอปพลิเคชันเดสก์ท็อป ฉันกำลังคิดที่จะแสดงข้อความถึงผู้ใช้เพื่อให้เขาสามารถติดต่อฝ่ายสนับสนุน ฉันจะแนะนำให้ผู้ใช้รีสตาร์ทแอปพลิเคชัน แต่ไม่บังคับ คล้ายกับสิ่งที่กล่าวถึงที่นี่: ux.stackexchange.com - วิธีที่ดีที่สุดในการจัดการข้อผิดพลาดของแอปพลิเคชันคืออะไร โครงการนี้เป็นแอปพลิเคชั่น. NET WPF ดังนั้นข้อเสนอที่อธิบายไว้อาจมีลักษณะเช่นนี้ (โปรดทราบว่านี่เป็นตัวอย่างแบบง่าย ๆ อาจเป็นไปได้ที่จะซ่อนรายละเอียดข้อยกเว้นจนกว่าผู้ใช้จะคลิกที่ "แสดงรายละเอียด" รายงานข้อผิดพลาดได้อย่างง่ายดาย): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact …

5
ทำไมไพ ธ อนไม่ต้องการคอมไพเลอร์?
แค่สงสัย (ตอนนี้ฉันเริ่มต้นด้วย C ++ ที่ต้องการคอมไพเลอร์) ทำไม Python ไม่ต้องการคอมไพเลอร์? ฉันเพิ่งป้อนรหัสบันทึกเป็นผู้บริหารและเรียกใช้ ใน C ++ ฉันต้องสร้างและสิ่งสนุกอื่น ๆ ทั้งหมด

5
วิธีที่มีประสิทธิภาพมากที่สุดในการจัดเก็บช่วงตัวเลขคืออะไร
คำถามนี้เกี่ยวกับจำนวนบิตที่ต้องใช้ในการจัดเก็บช่วง หรือใส่อีกวิธีหนึ่งสำหรับจำนวนบิตที่กำหนดช่วงสูงสุดที่สามารถจัดเก็บได้คือเท่าใด ลองนึกภาพเราต้องการเก็บช่วงย่อยภายในช่วง 0-255 ตัวอย่างเช่น 45-74 เราสามารถเก็บตัวอย่างด้านบนเป็นสองไบต์ที่ไม่ได้ลงชื่อ แต่มันทำให้ฉันรู้สึกว่าต้องมีข้อมูลซ้ำซ้อน เรารู้ว่าค่าที่สองมีขนาดใหญ่กว่าค่าแรกดังนั้นในกรณีที่ค่าแรกมีขนาดใหญ่จำเป็นต้องใช้บิตที่น้อยกว่าสำหรับค่าที่สองและในกรณีที่ค่าที่สองมีขนาดใหญ่จำเป็นต้องใช้บิตที่น้อยกว่าสำหรับครั้งแรก . ฉันสงสัยว่าเทคนิคการบีบอัดใด ๆ จะให้ผลลัพธ์ที่ได้เล็กน้อยดังนั้นจึงอาจเป็นคำถามที่ดีกว่าที่จะถาม "ช่วงสูงสุดที่สามารถเก็บไว้ในไบต์เดียวคืออะไร" นี่ควรใหญ่กว่าสิ่งที่ทำได้โดยจัดเก็บตัวเลขสองตัวแยกกัน มีอัลกอริธึมมาตรฐานสำหรับการทำสิ่งนี้หรือไม่?

6
การต่อสู้สร้างค่าใช้จ่ายเพิ่มเติมสำหรับโครงการที่ความต้องการไม่เปลี่ยนแปลงหรือไม่?
ฉันอ่านScrum - คู่มือพ็อกเก็ตโดย Gunther Verheyenและมันบอกว่า: รายงานความโกลาหลของปี 2011 โดยกลุ่ม Standish ถือเป็นจุดเปลี่ยน มีการวิจัยอย่างกว้างขวางในการเปรียบเทียบโครงการแบบดั้งเดิมกับโครงการที่ใช้วิธีแบบ Agile รายงานแสดงให้เห็นว่าวิธีการแบบ Agile เพื่อการพัฒนาซอฟต์แวร์นั้นให้ผลตอบแทนที่สูงกว่ามากถึงแม้จะเป็นความคาดหวังแบบเก่าที่ต้องส่งมอบซอฟต์แวร์ตรงเวลาตามงบประมาณและขอบเขตทั้งหมดที่สัญญาไว้ รายงานแสดงว่าโครงการ Agile ประสบความสำเร็จสามครั้งและมีโครงการ Agile ที่ล้มเหลวน้อยลงสามเท่าเมื่อเทียบกับโครงการดั้งเดิม ดังนั้นฉันจึงทะเลาะกับเพื่อนร่วมงานคนหนึ่งของฉันที่บอกว่าสำหรับบางโครงการ (เช่นยา / การทหารที่ความต้องการไม่เปลี่ยนแปลง) Agile (และโดยเฉพาะ Scrum) มีค่าใช้จ่ายในการประชุมทั้งหมด ฯลฯ และมันมีเหตุผลมากกว่า ตัวอย่างเช่นใช้น้ำตก มุมมองของฉันคือ Scrum ที่ควรนำมาใช้ในโครงการดังกล่าวเพราะมันจะทำให้กระบวนการโปร่งใสมากขึ้นและเพิ่มผลผลิตของทีม ฉันยังคิดว่ากิจกรรมการแย่งชิงกันจะไม่ใช้เวลามากถ้ามันไม่จำเป็นเพราะเราไม่จำเป็นต้องนั่งทั้ง 8 ชั่วโมงใน Sprint Planning เป็นเวลา 1 เดือน เราสามารถสำรอง 5 นาทีเพื่อให้แน่ใจว่าเราทุกคนอยู่ในหน้าเดียวกันและเริ่มทำงาน ดังนั้น Scrum จะสร้างค่าใช้จ่ายเพิ่มเติมสำหรับโครงการที่ความต้องการไม่เปลี่ยนแปลงหรือไม่

3
เหตุใดจึงไม่มีคำหลักคงที่ใน Kotlin
Kotlin เป็นที่รู้จักกันดีว่าเป็นตัวแทนการแทนที่สำหรับ Java แต่ได้ทำการลบการสร้าง Java ที่รู้จักกันดี: staticคำหลัก ฟังก์ชันระดับคลาสนั้นมีให้โดยส่วนใหญ่เป็นวัตถุที่เป็นเพื่อนแทน มีอะไรผิดปกติกับวิธีการแบบคงที่และสาขาที่วัตถุสหายให้ทางเลือกที่ดีกว่าเพื่อ? ฉันสับสนเกี่ยวกับเหตุผลและไม่พบคำอธิบายใด ๆ ในเอกสารประกอบ

3
จะเกิดอะไรขึ้นกับการทดสอบเมธอดเมื่อเมธอดนั้นเป็นไพรเวตหลังจากถูกออกแบบใหม่ใน TDD?
สมมติว่าฉันเริ่มพัฒนาเกมสวมบทบาทกับตัวละครที่โจมตีตัวละครอื่นและสิ่งต่าง ๆ ใช้ TDD ฉันสร้างกรณีทดสอบเพื่อทดสอบตรรกะภายในCharacter.receiveAttack(Int)วิธี บางสิ่งเช่นนี้ @Test fun healthIsReducedWhenCharacterIsAttacked() { val c = Character(100) //arg is the health c.receiveAttack(50) //arg is the suffered attack damage assertThat(c.health, is(50)); } บอกว่าผมมี 10 วิธีการทดสอบreceiveAttackวิธีการ ตอนนี้ผมเพิ่มวิธีการCharacter.attack(Character)(ที่โทรreceiveAttackวิธี) และหลังจากที่บางรอบ TDD ทดสอบนั้นผมตัดสินใจ: ควรจะเป็นCharacter.receiveAttack(Int)private จะเกิดอะไรขึ้นกับ 10 กรณีทดสอบก่อนหน้า? ฉันควรจะลบมันเหรอ? ฉันควรรักษาวิธีpublic(ฉันไม่คิดอย่างนั้น)? คำถามนี้ไม่ได้เกี่ยวกับวิธีการทดสอบวิธีการส่วนตัว แต่วิธีการจัดการกับพวกเขาหลังจากการออกแบบใหม่เมื่อใช้ TDD

4
บริษัท เช่น Amazon หลีกเลี่ยงปัญหาคอขวดในการเข้าถึงเลเยอร์ฐานข้อมูลได้อย่างไร
หากคุณนึกภาพ บริษัท อย่าง Amazon (หรือเว็บแอพพลิเคชั่นอีคอมเมิร์ซขนาดใหญ่อื่น ๆ ) นั่นคือการดำเนินงานร้านค้าออนไลน์ขนาดใหญ่และมีจำนวนสินค้าที่มีอยู่จริงจำนวน จำกัด ในคลังสินค้าของ บริษัท คอขวดเดียว? แน่นอนพวกเขาจะต้องมีฐานข้อมูลจำนวนมากที่มีการจำลองแบบและเซิร์ฟเวอร์จำนวนมากที่จัดการโหลดอย่างอิสระ อย่างไรก็ตามหากผู้ใช้หลายคนกำลังให้บริการโดยเซิร์ฟเวอร์แยกต่างหากและทั้งคู่พยายามเพิ่มรายการเดียวกันลงในรถเข็นซึ่งมีเหลืออยู่เพียงรายการเดียวจะต้องมี "แหล่งที่มาของความจริง" สำหรับปริมาณที่เหลือสำหรับรายการนั้น นี่ไม่ได้หมายความว่าอย่างน้อยที่สุดผู้ใช้ทุกคนที่เข้าถึงข้อมูลผลิตภัณฑ์สำหรับรายการเดียวจะต้องค้นหาฐานข้อมูลเดียวกันในอนุกรมหรือไม่ ฉันต้องการที่จะเข้าใจวิธีที่คุณสามารถใช้งานร้านค้าขนาดใหญ่โดยใช้การคำนวณแบบกระจายและไม่สร้างคอขวดขนาดใหญ่บนฐานข้อมูลเดียวที่มีข้อมูลสินค้าคงคลัง

1
คณะกรรมการมาตรฐาน C ++ ทดสอบแนวคิดการออกแบบอย่างไร
คณะกรรมการ C ++ ทดสอบข้อกำหนดการออกแบบใหม่ของพวกเขาด้วยคอมไพเลอร์ต้นแบบบางประเภทก่อนปล่อยมาตรฐานใหม่หรือไม่? หรือพวกเขาปล่อยมาตรฐานซึ่งเป็นผลทางทฤษฎีเท่านั้นจนกว่าคอมไพเลอร์ขนาดใหญ่ใช้มันได้หรือไม่

7
โปรแกรม C ++ ควรจับข้อยกเว้นทั้งหมดและป้องกันข้อยกเว้นจากการเดือดปุด ๆ ในอดีต main () หรือไม่?
ฉันได้รับคำแนะนำครั้งหนึ่งว่าในที่สุดโปรแกรม C ++ ควรจะได้รับการยกเว้นทั้งหมด เหตุผลที่ให้ไว้ในขณะนั้นคือโปรแกรมที่อนุญาตให้มีการยกเว้นเกิดฟองขึ้นนอกmain()เข้าสู่สถานะผีดิบแปลก ๆ ฉันบอกเรื่องนี้เมื่อหลายปีก่อนและในการหวนกลับฉันเชื่อว่าปรากฏการณ์ที่สังเกตได้เกิดจากการทิ้งแกนกลางขนาดใหญ่ที่ยาวเป็นพิเศษจากโครงการที่สงสัย ในเวลานี้ดูเหมือนจะแปลก แต่น่าเชื่อถือ มันไร้สาระโดยสิ้นเชิงที่ C ++ ควร "ลงโทษ" โปรแกรมเมอร์ที่ไม่จับข้อยกเว้นทั้งหมด แต่หลักฐานก่อนหน้าฉันดูเหมือนจะสำรองข้อมูลนี้ไว้ สำหรับโครงการที่มีปัญหาโปรแกรมที่โยนข้อยกเว้นที่ไม่ได้ตรวจจับนั้นดูเหมือนจะเข้าสู่สถานะผีดิบแปลก ๆ หรืออย่างที่ฉันคิดว่าสาเหตุอยู่ในขณะนี้กระบวนการที่อยู่ท่ามกลางการถ่ายโอนข้อมูลหลักที่ไม่ต้องการนั้นยากที่จะหยุด (สำหรับทุกคนที่สงสัยว่าทำไมสิ่งนี้ถึงไม่ชัดเจนในเวลานั้น: โครงการสร้างเอาต์พุตจำนวนมากในหลายไฟล์จากหลายกระบวนการซึ่งบดบังaborted (core dumped)ข้อความประเภทใด ๆ ได้อย่างมีประสิทธิภาพและในกรณีนี้การตรวจสอบการตายของแกนทิ้งไม่ได้ ไม่ใช่เทคนิคการดีบักที่สำคัญดังนั้นการถ่ายโอนข้อมูลหลักจึงไม่ได้รับการคิดมากปัญหาของโปรแกรมมักจะไม่ได้ขึ้นอยู่กับสถานะที่สะสมจากเหตุการณ์ต่าง ๆ ในช่วงเวลาหนึ่งโดยโปรแกรมที่ใช้งานมานาน 1 ชั่วโมง) ดังนั้นจึงมีประโยชน์มากกว่าที่จะรันโปรแกรมอีกครั้งโดยใช้อินพุตเดียวกันจากการสร้างข้อบกพร่องหรือในตัวดีบักเพื่อรับข้อมูลเพิ่มเติม) ขณะนี้ผมไม่แน่ใจว่ามีความได้เปรียบที่สำคัญใด ๆ main()หรือข้อเสียของการจับข้อยกเว้นเพียงเพื่อวัตถุประสงค์ในการป้องกันการยกเว้นจากการออก ข้อได้เปรียบเล็ก ๆ น้อย ๆ ที่ฉันคิดได้ในการยอมให้มีข้อยกเว้นเกิดฟองขึ้นในอดีตmain()คือทำให้เกิดผลลัพธ์std::exception::what()ที่จะพิมพ์ไปยังเทอร์มินัล (อย่างน้อยก็ด้วยโปรแกรมที่คอมไพล์ด้วย gcc บน Linux) บนมืออื่น ๆ นี้เป็นที่น่ารำคาญที่จะบรรลุโดยแทนที่จะจับข้อยกเว้นทั้งหมดมาจากstd::exceptionและการพิมพ์ผลมาจากstd::exception::what()และถ้ามันเป็นที่พึงปรารถนาที่จะพิมพ์ข้อความจากข้อยกเว้นที่ไม่ได้มาจากstd::exceptionนั้นก็จะต้องถูกจับก่อนที่จะออกmain()เพื่อพิมพ์ ข้อความ. ข้อเสียเปรียบเล็กน้อยที่ฉันสามารถคิดได้ในการอนุญาตให้มีการยกเว้นเกิดฟองขึ้นในอดีตmain()คือการทิ้งขยะที่ไม่ต้องการ สำหรับกระบวนการที่ใช้หน่วยความจำจำนวนมากสิ่งนี้อาจสร้างความรำคาญและควบคุมพฤติกรรมการถ่ายโอนข้อมูลหลักจากโปรแกรมที่ต้องการการเรียกใช้ฟังก์ชันเฉพาะระบบปฏิบัติการ ในทางตรงกันข้ามถ้าถ่ายโอนข้อมูลหลักและออกเป็นที่ต้องการแล้วนี้อาจแทนจะประสบความสำเร็จในเวลาใด …
29 c++  exceptions 

2
กระบวนการพัฒนารหัสสำหรับภารกิจรอบโลก?
Voyager 1 ไปถึงอวกาศระหว่างดวงดาวในเดือนสิงหาคม 2012 และเป็นวัตถุที่มนุษย์สร้างขึ้นในระยะไกลที่สุด เปิดตัวไม่นานหลังจากยานอวกาศแฝด Voyager 2 ในปี 1977 Voyager 1 ได้สำรวจระบบ Jovian และ Saturnian เพื่อค้นหาดวงจันทร์ดวงใหม่ภูเขาไฟที่ยังคุกรุ่นและข้อมูลมากมายเกี่ยวกับระบบสุริยะรอบนอก Voyager 1 และ 2 ถูกออกแบบมาเพื่อใช้ประโยชน์จากการจัดตำแหน่งดาวเคราะห์ที่หายากที่เกิดขึ้นเพียงครั้งเดียวใน 176 ปีและยังคงเป็นยานอวกาศที่เดินทางได้ดีที่สุดในประวัติศาสตร์ ยานอวกาศทั้งคู่มีแคปซูลเวลาหนึ่งที่เรียกว่าแผ่นเสียงทองคำซึ่งเป็นแผ่นทองแดงทองคำขนาด 12 นิ้วที่บรรจุเสียงและภาพที่ถูกเลือกเพื่อถ่ายทอดเรื่องราวของโลกของเราไปยังมนุษย์ต่างดาว ฉันสันนิษฐานว่าคนส่วนใหญ่ที่สร้างซอฟต์แวร์สำหรับภารกิจนี้ได้เลิกใช้งานไปแล้ว แต่ในระยะเวลา 35 ปีที่ผ่านมาภาษาการเขียนโปรแกรมขั้นสูงจนถึงปัจจุบัน ดังนั้นจึงเปิดตัวในปี 1977 หลังจาก 35 ปีรอบโลกถึงอวกาศระหว่างดวงดาว มีโค้ดกี่บรรทัดและเขียนด้วยภาษาใด? กระบวนการพัฒนาที่อยู่เบื้องหลังภารกิจนี้ (ยังคงใช้งานอยู่) คืออะไร ดังนั้นอะไรคือแผนการที่ยิ่งใหญ่กว่าที่มีรหัสในภารกิจนี้และในภาษาใดที่เป็นรหัสฐานเขียน?

8
มันเป็นที่ยอมรับในการคัดลอกและวางยาว แต่รหัสตรงไปตรงมาแทนที่จะห่อไว้ในชั้นเรียนหรือฟังก์ชั่น?
สมมติว่าฉันมีส่วนของรหัสเพื่อเชื่อมต่อกับอินเทอร์เน็ตและแสดงผลลัพธ์การเชื่อมต่อเช่น: HttpRequest* httpRequest=new HttpRequest(); httpRequest->setUrl("(some domain .com)"); httpRequest->setRequestType(HttpRequest::Type::POST); httpRequest->setRequestData("(something like name=?&age=30&...)"); httpRequest->setResponseCallback([=](HttpClient* client, HttpResponse* response){ string responseString=response->getResponseDataString(); if(response->getErrorCode()!=200){ if(response->getErrorCode()==404){ Alert* alert=new Alert(); alert->setFontSize(30); alert->setFontColor(255,255,255); alert->setPosition(Screen.MIDDLE); alert->show("Connection Error","Not Found"); }else if((some other different cases)){ (some other alert) }else Alert* alert=new Alert(); alert->setFontSize(30); alert->setPosition(Screen.MIDDLE); alert->setFontColor(255,255,255); alert->show("Connection Error","unknown error"); } }else{ (other handle …

3
เหตุใด UML จึงไม่ถูกใช้ในซอฟต์แวร์ฟรีส่วนใหญ่ (เช่นบน Linux)
ฉันพยายามที่จะเข้าใจว่าทำไมUMLไม่ได้ถูกใช้ในส่วนซอฟต์แวร์ฟรีโครงการ ตัวอย่างเช่นระบบ Debian / Linux ของฉันอาจมีแพ็คเกจซอฟต์แวร์ฟรีมากกว่าหมื่นชุดและฉันไม่สามารถตั้งชื่อชุดที่พัฒนาโดยใช้กรอบและวิธีการ UML ที่ชัดเจนได้ ยกตัวอย่างเช่นQt , GCC , ลินุกซ์เคอร์เนล , ทุบตี , GNU แต่งหน้า , Ocaml , คำพังเพย , พร้อมเพรียง , lighttpd , libonion , นักเทียบท่าเป็นโครงการซอฟแวร์ฟรีที่ (AFAIK) ไม่ได้กล่าวถึง UML ที่ทั้งหมด (ฉันเดาว่า UML เหมาะมากสำหรับการรับช่วงการพัฒนาอย่างเป็นทางการและไม่ใช่การพัฒนาซอฟต์แวร์ฟรี) สังเกตว่าในขณะที่ฉันอ่านเนื้อหาเกี่ยวกับ UML ฉันไม่ได้อ้างว่ามีความเข้าใจที่ดี ที่จริงแล้วฉันไม่สามารถตั้งชื่อซอฟต์แวร์ฟรีที่ใช้ UML ได้อย่างง่ายดาย (ยกเว้นเครื่องมือ UML บางตัวที่ใช้เป็นซอฟต์แวร์ฟรี) บางทีopenstackเป็นข้อยกเว้น (มีบางสิ่งที่กล่าวถึง UML) (แม้แต่โครงการซอฟต์แวร์เก่าฟรีอาจใช้ …

11
จำเป็นต้องมีรูปแบบการออกแบบและระดับของนามธรรมเท่าไร [ปิด]
ฉันจะบอกได้อย่างไรว่าซอฟต์แวร์ของฉันมีสิ่งที่เป็นนามธรรมมากเกินไปและมีรูปแบบการออกแบบมากเกินไปหรือในทางกลับกันฉันจะรู้ได้อย่างไรว่าควรมีซอฟต์แวร์มากกว่านั้น นักพัฒนาที่ฉันทำงานด้วยกำลังเขียนโปรแกรมต่าง ๆ เกี่ยวกับประเด็นเหล่านี้ บางฟังก์ชั่นเป็นนามธรรมทุกฟังก์ชั่นเล็กน้อยใช้รูปแบบการออกแบบทุกที่ที่เป็นไปได้ คนอื่นรวมถึงฉันพยายามที่จะใช้ประโยชน์ได้มากขึ้นและเขียนโค้ดที่ไม่เหมาะกับทุกรูปแบบการออกแบบ แต่เป็นวิธีที่เข้าใจได้เร็วขึ้นเพราะใช้นามธรรมน้อยกว่า ฉันรู้ว่านี่เป็นการแลกเปลี่ยน ฉันจะบอกได้อย่างไรว่ามีสิ่งที่เป็นนามธรรมเพียงพอในโครงการและฉันจะรู้ได้อย่างไรว่ามันต้องการมาก ตัวอย่างเมื่อเลเยอร์แคชทั่วไปถูกเขียนโดยใช้ Memcache เราจำเป็นต้องจริงๆMemcache, MemcacheAdapter, MemcacheInterface, AbstractCache, CacheFactory, CacheConnector... หรือคือง่ายต่อการรักษาและยังคงรหัสที่ดีเมื่อใช้เพียงครึ่งหนึ่งของชั้นเรียนเหล่านั้นหรือไม่ พบสิ่งนี้ใน Twitter: ( https://twitter.com/rawkode/status/875318003306565633 )

2
เหตุใด C สตริงตัวอักษรอ่านอย่างเดียว?
ข้อได้เปรียบของสตริงตัวอักษรที่อ่านได้อย่างเดียวคืออะไร (-ies / -ied): อีกวิธีในการยิงตัวเองที่เท้า char *foo = "bar"; foo[0] = 'd'; /* SEGFAULT */ ไม่สามารถเริ่มต้นอาร์เรย์ของคำอ่าน - เขียนได้อย่างหรูหราในหนึ่งบรรทัด: char *foo[] = { "bar", "baz", "running out of traditional placeholder names" }; foo[1][2] = 'n'; /* SEGFAULT */ ภาษาที่ซับซ้อนนั้นเอง char *foo = "bar"; char var[] = "baz"; some_func(foo); /* VERY DANGEROUS! …
29 c  memory  strings 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.