1 00:00:00,000 --> 00:00:02,480 >> [เล่นเพลง] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG LLOYD: สิทธิทั้งหมดเพื่อให้ พูดคุยเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่ง 4 00:00:09,350 --> 00:00:11,800 ดังนั้นเพื่อให้ห่างไกลในหลักสูตรสวย มากทุกโปรแกรมของคุณ 5 00:00:11,800 --> 00:00:16,360 อาจจะได้เริ่มต้น เช่น this-- int เป็นโมฆะหลัก 6 00:00:16,360 --> 00:00:18,310 เราได้รับการจัดเก็บภาษี ท่านผู้ใช้ถ้าเราจำเป็นต้องใช้มัน 7 00:00:18,310 --> 00:00:21,080 ในโปรแกรมของเราเช่น โปรแกรมมาริโอยกตัวอย่างเช่น 8 00:00:21,080 --> 00:00:22,990 โดยแจ้งในโปรแกรม 9 00:00:22,990 --> 00:00:25,190 เรายังไม่จำเป็นที่จะปรับเปลี่ยน ประกาศหลัก 10 00:00:25,190 --> 00:00:30,684 เพราะแทนที่จะภายในของเราหลัก เพียงแค่พูดว่าคุณอาจเรียกมันว่าจะได้รับ int 11 00:00:30,684 --> 00:00:32,350 วิธีที่มีขนาดใหญ่ที่คุณต้องการพีระมิดจะเป็น? 12 00:00:32,350 --> 00:00:34,455 หรือคุณอาจเรียกมันว่าจะได้รับ float-- เท่าใดการเปลี่ยนแปลง 13 00:00:34,455 --> 00:00:36,400 ฉันควรส่งออกไปยังผู้ใช้หรือไม่ 14 00:00:36,400 --> 00:00:38,630 >> มีวิธีอื่น แต่ และถ้าเราต้องการให้ผู้ใช้ของเรา 15 00:00:38,630 --> 00:00:40,580 เพื่อให้สามารถที่จะให้ ข้อมูลในการเขียนโปรแกรมของเรา 16 00:00:40,580 --> 00:00:43,320 ที่รันไทม์แทนในขณะที่ โปรแกรมจะทำงาน 17 00:00:43,320 --> 00:00:45,910 ความแตกต่างที่บอบบาง แต่ บางครั้งหนึ่งที่มีประโยชน์มาก 18 00:00:45,910 --> 00:00:48,120 เราจำเป็นต้องมีรูปแบบใหม่ของการประกาศหลัก 19 00:00:48,120 --> 00:00:53,320 เราไม่สามารถใช้เป็นโมฆะหลัก int ถ้าเราต้องการ การเก็บรวบรวมข้อมูลอื่น ๆ ที่บรรทัดคำสั่ง 20 00:00:53,320 --> 00:00:57,540 เมื่อผู้ใช้เรียกใช้โปรแกรม จึงอาร์กิวเมนต์บรรทัดคำสั่ง 21 00:00:57,540 --> 00:00:59,810 >> ในการเก็บรวบรวมบรรทัดคำสั่งเหล่านี้ ข้อโต้แย้งจากผู้ใช้ 22 00:00:59,810 --> 00:01:03,140 เปลี่ยนการประกาศของคุณ หลักจะมีลักษณะเหมือน int this-- 23 00:01:03,140 --> 00:01:10,450 หลักวงเล็บเปิด int argc, เครื่องหมายจุลภาค argv สตริงตารางวงเล็บ 24 00:01:10,450 --> 00:01:12,670 แล้วเปิดวงเล็บปีกกา 25 00:01:12,670 --> 00:01:14,415 ดังนั้นสิ่งที่หมายความว่าอยู่แล้ว? 26 00:01:14,415 --> 00:01:19,410 ดีที่เราจะผ่านในสองพารามิเตอร์ หรือข้อโต้แย้งหรือปัจจัยการผลิตหลัก 27 00:01:19,410 --> 00:01:23,800 หนึ่งจำนวนเต็มเรียกว่า argc, และอื่น ๆ คืออะไร? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 มันเป็นอาเรย์ของสายใช่มั้ย? 30 00:01:29,640 --> 00:01:31,140 เราเห็นสัญกรณ์วงเล็บเหลี่ยมที่ 31 00:01:31,140 --> 00:01:32,181 มันเป็นอาเรย์ของสาย 32 00:01:32,181 --> 00:01:35,110 มันไม่ได้เป็นสตริงแต่ละ มันเป็นอาเรย์ของสาย 33 00:01:35,110 --> 00:01:39,640 และทั้งสองมีปากเสียง argc และ argv, ช่วยให้คุณสามารถที่จะรู้ว่าข้อมูลของผู้ใช้ 34 00:01:39,640 --> 00:01:42,912 ได้จัดให้มีที่บรรทัดคำสั่ง และวิธีการหลายสิ่งที่พวกเขา 35 00:01:42,912 --> 00:01:44,120 ที่มีให้ ณ บรรทัดคำสั่ง 36 00:01:44,120 --> 00:01:46,570 สิ่งที่มีประโยชน์สวยที่จะทำงานกับ 37 00:01:46,570 --> 00:01:50,310 >> argc ย่อมานับอาร์กิวเมนต์ และคุณควรจะรู้ว่าโดยวิธีการที่ 38 00:01:50,310 --> 00:01:52,600 ที่คุณสามารถเรียก argc สิ่งที่คุณต้องการ 39 00:01:52,600 --> 00:01:54,710 คุณสามารถเรียก argv สิ่งที่คุณต้องการ 40 00:01:54,710 --> 00:01:58,740 เหล่านี้เป็นเพียงชื่อเดิม ที่เราใช้สำหรับการนับอาร์กิวเมนต์ them--, 41 00:01:58,740 --> 00:02:00,907 และในขณะที่เราจะได้เห็นในครั้งที่สอง เวกเตอร์อาร์กิวเมนต์ argv 42 00:02:00,907 --> 00:02:03,698 แต่คุณจะได้ไม่ต้องเรียกพวกเขา argc และ argv ถ้าคุณไม่ต้องการ 43 00:02:03,698 --> 00:02:05,570 แต่อัตภาพว่าเป็นสิ่งที่เราทำ 44 00:02:05,570 --> 00:02:07,500 >> ดังนั้นต่อไป argc นับอาร์กิวเมนต์ 45 00:02:07,500 --> 00:02:11,569 มันเป็นตัวแปรจำนวนเต็มชนิดและเพื่อให้เป็น คุณอาจคาดหวังถ้าเรามีสองสิ่ง 46 00:02:11,569 --> 00:02:13,860 ที่เรากำลังจะหา สิ่งเหล่านี้จะถูกพิมพ์ 47 00:02:13,860 --> 00:02:16,070 และวิธีการมากสิ่งที่ ผู้ใช้พิมพ์ argc คือ 48 00:02:16,070 --> 00:02:18,559 จะบอกเราเท่าใด สิ่งที่ผู้ใช้พิมพ์ 49 00:02:18,559 --> 00:02:20,850 ดังนั้นจึงช่วยให้คุณมีจำนวนของ ผู้ใช้อาร์กิวเมนต์บรรทัดคำสั่ง 50 00:02:20,850 --> 00:02:22,470 พิมพ์เมื่อโปรแกรมถูกประหารชีวิต 51 00:02:22,470 --> 00:02:25,780 ดังนั้นถ้าโปรแกรมของคุณ เรียกจุดเฉือนโลภ 52 00:02:25,780 --> 00:02:28,670 และภายในของโลภของคุณ โปรแกรมฟังก์ชั่นหลักของคุณ 53 00:02:28,670 --> 00:02:34,800 มีการประกาศ int argc int หลักที่ สตริง argv วงเล็บแล้ว 54 00:02:34,800 --> 00:02:37,950 argc ในกรณีที่เป็นหนึ่ง 55 00:02:37,950 --> 00:02:40,200 ตอนนี้สังเกตเห็นเราทำไม่ได้ นับหลายสิ่งหลายอย่าง 56 00:02:40,200 --> 00:02:42,590 ผู้ใช้พิมพ์หลังจากที่ชื่อโปรแกรม 57 00:02:42,590 --> 00:02:46,710 ชื่อโปรแกรมที่ตัวเองนับ เป็นอาร์กิวเมนต์บรรทัดคำสั่ง 58 00:02:46,710 --> 00:02:51,770 >> ดังนั้นจุดเฉือนโลภใน กรณีที่ argc เป็นหนึ่ง 59 00:02:51,770 --> 00:02:57,910 หากผู้ใช้พิมพ์เฉือนโลภ 1024 CS50 ที่บรรทัดคำสั่งที่ argc ในกรณีที่ 60 00:02:57,910 --> 00:02:59,520 จะสาม 61 00:02:59,520 --> 00:03:03,720 และเรารู้ว่านี้เพราะทาง ที่แบ่งระหว่างสตริง 62 00:03:03,720 --> 00:03:06,030 มีการตรวจพบว่า มีพื้นที่ว่างหรือแท็บ 63 00:03:06,030 --> 00:03:08,230 หรือสิ่งที่ต้องการระหว่างพวกเขา 64 00:03:08,230 --> 00:03:13,860 ดังนั้นจำนวนเงินใด ๆ ของพื้นที่สีขาวที่เรียกว่า ระหว่างค่าพิมพ์บรรทัดคำสั่ง 65 00:03:13,860 --> 00:03:15,720 แสดงให้เห็นว่ามีหลาย 66 00:03:15,720 --> 00:03:24,040 ดังนั้นจุดเฉือนพื้นที่โลภ 1024 พื้นที่ CS50, argc ในกรณีที่สาม 67 00:03:24,040 --> 00:03:26,600 >> argv เป็นเวกเตอร์โต้แย้ง 68 00:03:26,600 --> 00:03:29,240 เวกเตอร์โดยวิธีการที่เป็นเพียง คำสำหรับอาร์เรย์ 69 00:03:29,240 --> 00:03:31,510 และนี่คืออาร์เรย์ สตริงที่ร้านค้า 70 00:03:31,510 --> 00:03:35,540 หนึ่งสายต่อองค์ประกอบซึ่งเป็น สายที่ผู้ใช้จริง 71 00:03:35,540 --> 00:03:39,230 พิมพ์ที่บรรทัดคำสั่ง เมื่อโปรแกรมถูกประหารชีวิต 72 00:03:39,230 --> 00:03:40,990 ตอนนี้เป็นกรณีที่ กับอาร์เรย์ใด ๆ หากคุณ 73 00:03:40,990 --> 00:03:44,380 จำได้จากการสนทนาของเรา อาร์เรย์องค์ประกอบแรกของ argv 74 00:03:44,380 --> 00:03:49,150 เสมอไปที่จะพบ ที่ยึด argv ตารางศูนย์ 75 00:03:49,150 --> 00:03:51,800 นั่นเป็นครั้งแรกที่ดัชนี ของอาร์เรย์ argv 76 00:03:51,800 --> 00:03:55,720 เพื่อให้ will-- และในความเป็นจริงที่จะ มักจะเป็นชื่อของโปรแกรม 77 00:03:55,720 --> 00:03:59,730 มักจะตั้งอยู่ที่ argv วงเล็บเหลี่ยมศูนย์ 78 00:03:59,730 --> 00:04:08,590 >> องค์ประกอบสุดท้ายของ argv พบเสมอ ที่ argv วงเล็บ argc ลบหนึ่ง 79 00:04:08,590 --> 00:04:10,300 คุณเห็นว่าทำไม? 80 00:04:10,300 --> 00:04:14,180 โปรดจำไว้ว่าหลายองค์ประกอบ อยู่ในอาร์เรย์นี้ 81 00:04:14,180 --> 00:04:16,660 ดีที่เรารู้ว่ามันเป็น that-- argc จำนวนขององค์ประกอบ 82 00:04:16,660 --> 00:04:21,279 หากผู้ใช้พิมพ์สามสิ่งที่ บรรทัดคำสั่งที่ argc สาม 83 00:04:21,279 --> 00:04:27,070 แต่เนื่องจากในคเมื่อเรากำลังทำงาน กับอาร์เรย์แต่ละองค์ประกอบของอาร์เรย์ 84 00:04:27,070 --> 00:04:30,190 หรือมากกว่าดัชนีของ อาร์เรย์เริ่มต้นที่ศูนย์ 85 00:04:30,190 --> 00:04:34,000 ถ้าเรามีสามองค์ประกอบของเรา อาร์เรย์เรามีองค์ประกอบที่ argv ศูนย์การ 86 00:04:34,000 --> 00:04:37,930 องค์ประกอบที่ argv หนึ่ง, และองค์ประกอบที่สอง argv 87 00:04:37,930 --> 00:04:41,700 มีองค์ประกอบที่เป็น argv สามและอาเรย์ที่มีขนาดสาม 88 00:04:41,700 --> 00:04:43,990 เพื่อที่ว่าทำไมที่ผ่านมา องค์ประกอบของ argv สามารถเสมอ 89 00:04:43,990 --> 00:04:49,510 พบได้ที่ตาราง argv วงเล็บ argc ลบหนึ่ง 90 00:04:49,510 --> 00:04:52,420 >> ดังนั้นสมมติว่าผู้ใช้รัน โปรแกรมโลภเป็น follows-- 91 00:04:52,420 --> 00:04:57,970 ถ้าพวกเขาพิมพ์ในจุดบรรทัดคำสั่ง เฉือนพื้นที่โลภ 1024 พื้นที่ CS50, 92 00:04:57,970 --> 00:05:00,720 และด้วยเหตุผลอะไรก็ตามที่เราได้ เตรียมไว้แล้วโปรแกรมโลภของเรา 93 00:05:00,720 --> 00:05:04,050 ที่จะรู้และทำงานร่วมกับเหล่านี้ อาร์กิวเมนต์บรรทัดคำสั่ง 94 00:05:04,050 --> 00:05:07,030 เราไม่ได้ก่อนหน้านี้เมื่อเราทำงาน ที่มันสำหรับปัญหาโลภ 95 00:05:07,030 --> 00:05:09,660 แต่ขอบอกว่าเราได้มีการปรับเปลี่ยนในขณะนี้ เพื่อที่เราทำกระบวนการ 96 00:05:09,660 --> 00:05:11,480 อาร์กิวเมนต์บรรทัดคำสั่งในทางใดทางหนึ่ง 97 00:05:11,480 --> 00:05:15,720 ในกรณีนี้ argv ศูนย์ คือเฉือนจุดโลภ 98 00:05:15,720 --> 00:05:17,042 สิ่งหนึ่ง argv? 99 00:05:17,042 --> 00:05:19,030 ดีก็ 1024 ใช่มั้ย? 100 00:05:19,030 --> 00:05:22,620 มันเป็น 1024 แต่ที่นี่เป็น distinction-- ที่สำคัญจริงๆ 101 00:05:22,620 --> 00:05:26,410 คุณจำชนิดข้อมูลของ argv หรือไม่ 102 00:05:26,410 --> 00:05:31,020 >> มันเก็บสายใช่มั้ย? 103 00:05:31,020 --> 00:05:34,140 แต่ดูเหมือนว่า 1024 เป็นค่าจำนวนเต็ม 104 00:05:34,140 --> 00:05:36,530 นี่คือสิ่งที่สำคัญจริงๆ ความแตกต่างและเป็นจริง 105 00:05:36,530 --> 00:05:40,200 จะกลายเป็นสิ่งที่คุณ อาจพบในปัญหาในภายหลัง 106 00:05:40,200 --> 00:05:43,770 ทุกอย่างใน argv เป็น เก็บไว้เป็นสตริง 107 00:05:43,770 --> 00:05:48,775 ดังนั้นเนื้อหาของคน argv เป็น สตริงหนึ่งศูนย์สองสี่ 108 00:05:48,775 --> 00:05:50,275 ซึ่งประกอบด้วยผู้ที่สี่ตัวอักษร 109 00:05:50,275 --> 00:05:53,870 มันเหมือนกับว่าผู้ใช้พิมพ์ หนึ่งศูนย์สองสี่ 110 00:05:53,870 --> 00:05:56,680 เป็นตัวอักษรของแต่ละบุคคลหรือตัวอักษร 111 00:05:56,680 --> 00:06:00,730 มันไม่ได้เป็นจำนวนเต็ม 1024, และเพื่อให้คุณไม่สามารถโดยตรง 112 00:06:00,730 --> 00:06:11,580 ทำงานกับมันด้วยการพูดว่า int 1000 หรือ ค่อนข้าง int x เท่ากับ argv หนึ่งลบ 24 113 00:06:11,580 --> 00:06:15,550 >> สังหรณ์ใจที่คุณอาจคิดว่า เป็นตกลงกันมันเป็น 1,024 ลบ 24 114 00:06:15,550 --> 00:06:17,920 ดังนั้น x เท่ากับ 1,000 115 00:06:17,920 --> 00:06:22,020 แต่ในความเป็นจริงที่ไม่ได้กรณีที่ เพราะ argv เป็นสตริง 116 00:06:22,020 --> 00:06:23,940 สตริง 1024 117 00:06:23,940 --> 00:06:28,739 ขณะนี้มีฟังก์ชั่นที่สามารถ ใช้ในการแปลงสตริงเพื่อจำนวนเต็ม 118 00:06:28,739 --> 00:06:30,780 ฉันจะไม่เสียมันสำหรับคุณ ตอนนี้ แต่ผมมั่นใจว่า Zamyla 119 00:06:30,780 --> 00:06:34,380 จะมีความสุขที่จะบอกคุณเกี่ยวกับมันใน คำแนะนำสำหรับปัญหาที่เกิดขึ้นในอนาคต 120 00:06:34,380 --> 00:06:36,390 แต่คุณยังสามารถหา ปัญหาข้อแก้ตัว like-- 121 00:06:36,390 --> 00:06:39,921 ผมฟังก์ชั่นที่จะ ทำเช่นนี้ใน 50 อ้างอิง 122 00:06:39,921 --> 00:06:42,462 ถ้าคุณไปที่คู่มืออ้างอิง คุณสามารถหาฟังก์ชั่นที่ 123 00:06:42,462 --> 00:06:43,820 จะทำให้การแปลงนี้สำหรับคุณ 124 00:06:43,820 --> 00:06:45,980 แต่อีกครั้งในคำแนะนำแบบ สำหรับปัญหาในอนาคต 125 00:06:45,980 --> 00:06:48,290 Zamyla ยินดีที่จะ บอกคุณว่าฟังก์ชั่น 126 00:06:48,290 --> 00:06:53,280 มันคือการที่จะแปลง สตริงจำนวนเต็ม 1024 ถึง 1024 127 00:06:53,280 --> 00:06:54,560 >> ทั้งหมดขวาเพื่อย้าย 128 00:06:54,560 --> 00:06:56,726 เราได้ครอบคลุมศูนย์ argv ของเรา เราได้ครอบคลุม argv หนึ่ง 129 00:06:56,726 --> 00:06:58,000 สิ่งที่อยู่ใน argv สอง? 130 00:06:58,000 --> 00:06:58,620 CS50 131 00:06:58,620 --> 00:07:01,350 หนึ่งที่อาจ สวยด้วยตนเองอธิบาย 132 00:07:01,350 --> 00:07:02,950 สิ่งที่อยู่ใน argv สาม? 133 00:07:02,950 --> 00:07:04,970 ดีอีกครั้งที่เราไม่ทราบจริงๆใช่มั้ย? 134 00:07:04,970 --> 00:07:08,060 เรามีอาร์เรย์ของขนาดสามที่ ว่าเป็นวิธีที่หลาย ๆ องค์ประกอบที่ผู้ใช้ 135 00:07:08,060 --> 00:07:11,610 พิมพ์ที่บรรทัดคำสั่ง, ดังนั้นถ้าเราไป argv สาม 136 00:07:11,610 --> 00:07:14,660 ตอนนี้เรา overstepping ขอบเขตของอาร์เรย์ของเรา 137 00:07:14,660 --> 00:07:18,570 คอมไพเลอร์จะช่วยให้เราทำเช่นนี้ ไม่มีปัญหาที่ใช้งานง่ายกับมัน 138 00:07:18,570 --> 00:07:22,890 แต่ในแง่ของจริงสิ่งที่เกิดขึ้น ที่จะเกิดขึ้นเราไม่ทราบจริงๆ 139 00:07:22,890 --> 00:07:25,380 มันขึ้นอยู่กับสิ่งที่เป็น ตั้งอยู่ที่หน่วยความจำที่ 140 00:07:25,380 --> 00:07:28,060 argv สามจะได้รับการคาดว่าจะเป็น 141 00:07:28,060 --> 00:07:30,716 และเพื่อให้เราจะจบลง รับไปฟรีลอยนวล 142 00:07:30,716 --> 00:07:33,840 มีโอกาสมากขึ้นกว่าไม่ได้โดยเฉพาะอย่างยิ่งเมื่อ คุณกำลังทำงานกับ argv ตรงข้าม 143 00:07:33,840 --> 00:07:35,548 ไปยังอาร์เรย์อื่น ๆ ที่อยู่ในโปรแกรมของเรา 144 00:07:35,548 --> 00:07:38,660 เราอาจจะต้องทนทุกข์ทรมาน ความผิดพลาดในการแบ่งส่วน ดังนั้นอีกครั้ง 145 00:07:38,660 --> 00:07:42,756 จะแน่ใจว่าจะไม่ล้ำเส้นขอบเขต ของอาร์เรย์ของคุณโดยเฉพาะ argv, 146 00:07:42,756 --> 00:07:47,170 รับระดับสูงของ ความสำคัญในโปรแกรมของคุณ 147 00:07:47,170 --> 00:07:48,100 >> ฉันลอยด์ดั๊ก 148 00:07:48,100 --> 00:07:50,170 นี่คือ CS50 149 00:07:50,170 --> 00:07:51,457