1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUSIC CHƠI] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: Được rồi. 4 00:00:12,100 --> 00:00:15,620 Vì vậy, điều đầu tiên đầu tiên, video từ một gương mặt quen thuộc. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO XEM LẠI] 7 00:00:22,560 --> 00:00:23,370 >> -Được rồi. 8 00:00:23,370 --> 00:00:27,150 Đây là CS50, và đây là đầu tuần ba. 9 00:00:27,150 --> 00:00:29,980 Tôi xin lỗi tôi không thể có mặt với bạn ngày hôm nay, nhưng cho phép tôi giới thiệu 10 00:00:29,980 --> 00:00:32,880 Của Rob Boden CS50 của. 11 00:00:32,880 --> 00:00:33,872 >> [END phát lại video] 12 00:00:33,872 --> 00:00:39,340 >> [Vỗ tay và cổ vũ] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: Các phim đã đóng trong video là tuyệt vời. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Được rồi. 16 00:00:47,770 --> 00:00:50,960 Vì vậy, đầu tiên, có ăn trưa khác. 17 00:00:50,960 --> 00:00:52,330 Đó là vào ngày mai tại 01:15. 18 00:00:52,330 --> 00:00:54,480 Không có bữa ăn trưa vào thứ sáu này. 19 00:00:54,480 --> 00:00:55,810 Đó là với Quora. 20 00:00:55,810 --> 00:01:00,190 Và Tommy không có ở đây, nhưng một trong những người dân ở đó là cựu CF đầu, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Vì vậy, anh ấy là một chàng trai vui vẻ. 23 00:01:02,730 --> 00:01:04,819 Bạn nên đến. 24 00:01:04,819 --> 00:01:05,900 >> Được rồi. 25 00:01:05,900 --> 00:01:11,360 Vì vậy, tuần trước, chúng tôi bắt đầu phá vỡ ngoài về những gì thực sự là một chuỗi. 26 00:01:11,360 --> 00:01:14,830 Chúng ta đã biết ngay từ đầu rằng đó là một chuỗi các ký tự. 27 00:01:14,830 --> 00:01:18,130 Nhưng tuần trước, chúng tôi đào sâu vào thực tế rằng những gì thực sự là một chuỗi các 28 00:01:18,130 --> 00:01:22,110 ký tự, tốt, bây giờ chúng ta có mảng các ký tự. 29 00:01:22,110 --> 00:01:26,450 Và chúng ta biết rằng một chuỗi, nó là một mảng của các nhân vật, vào cuối, 30 00:01:26,450 --> 00:01:30,920 chúng tôi có byte null đặc biệt này, điều này dấu gạch chéo ngược 0, cho biết cuối 31 00:01:30,920 --> 00:01:32,230 chuỗi. 32 00:01:32,230 --> 00:01:36,970 >> Và do đó, một chuỗi là một mảng nhân vật, nhưng chúng ta có thể có nhiều hơn 33 00:01:36,970 --> 00:01:39,530 chỉ là một mảng kí tự, chúng ta có thể có một mảng của bất kỳ 34 00:01:39,530 --> 00:01:40,890 loại điều chúng ta muốn. 35 00:01:40,890 --> 00:01:51,570 Vì vậy, nếu bạn nhớ lại từ tuần trước, Chương trình lứa tuổi mà David giới thiệu 36 00:01:51,570 --> 00:01:53,560 thực sự nhanh chóng. 37 00:01:53,560 --> 00:01:57,010 Điều đầu tiên để chúng ta sẽ làm là yêu cầu người dùng cho một số nguyên, 38 00:01:57,010 --> 00:01:58,800 số lượng người trong phòng. 39 00:01:58,800 --> 00:02:01,260 Một khi chúng ta có số nguyên, chúng ta đang khai báo một mảng. 40 00:02:01,260 --> 00:02:02,890 Chú ý cú pháp khung này. 41 00:02:02,890 --> 00:02:04,540 Bạn sẽ làm quen với điều đó. 42 00:02:04,540 --> 00:02:09,430 >> Vì vậy, chúng ta đang khai báo một mảng các số nguyên được gọi là lứa tuổi, và có n 43 00:02:09,430 --> 00:02:12,080 số nguyên trong mảng này. 44 00:02:12,080 --> 00:02:16,480 Vì vậy, mô hình này ngay tại đây, 4 int này i bằng 0, i nhỏ hơn n, tôi cộng 45 00:02:16,480 --> 00:02:20,580 cộng thêm, đó cũng sẽ là một mô hình mà bạn nhận được rất được sử dụng để. 46 00:02:20,580 --> 00:02:24,000 Bởi vì đó là khá nhiều như thế nào bạn luôn luôn lặp qua mảng. 47 00:02:24,000 --> 00:02:26,330 Vì vậy, hãy nhớ rằng n là chiều dài của mảng của chúng tôi. 48 00:02:26,330 --> 00:02:32,120 Và vì vậy ở đây, chúng tôi nhiều lần yêu cầu cho tuổi của người tôi trong phòng. 49 00:02:32,120 --> 00:02:36,640 >> Sau này, chúng tôi đi xuống, và cho bất cứ điều gì Lý do tùy ý, sau đó chúng tôi 50 00:02:36,640 --> 00:02:40,220 in ra bao nhiêu tuổi họ sẽ là một năm kể từ bây giờ. 51 00:02:40,220 --> 00:02:49,980 Và chạy chương trình đó, chúng ta hãy làm cho các lứa tuổi, lứa tuổi dot dấu gạch chéo. 52 00:02:49,980 --> 00:02:53,010 Vì vậy, số lượng người trong phòng, chúng ta hãy nói có ba. 53 00:02:53,010 --> 00:02:59,880 Và nói, người đầu tiên là 13, tiếp theo là 26, và cuối cùng là 30. 54 00:02:59,880 --> 00:03:05,080 Vì vậy, sau đó nó sẽ duyệt qua những ba người, in ra 14, 27, và 31. 55 00:03:05,080 --> 00:03:16,060 >> Vì vậy, hãy nhớ rằng khi chúng ta khai báo một mảng có kích thước n, các chỉ số trong đó 56 00:03:16,060 --> 00:03:19,950 mảng, mảng có giá trị và chỉ số 0, 1, 2, tất cả các cách 57 00:03:19,950 --> 00:03:21,680 đến n trừ đi 1. 58 00:03:21,680 --> 00:03:26,255 Vì vậy, khi chúng tôi cho biết đã có ba người trong phòng, và chúng tôi đặt tại đây 59 00:03:26,255 --> 00:03:29,850 phiên đầu tiên thông qua này vòng lặp, tôi sẽ là 0. 60 00:03:29,850 --> 00:03:31,650 Vì vậy, trong chỉ số 0. 61 00:03:31,650 --> 00:03:34,540 Chúng tôi đang giao đầu tiên tuổi người dùng nhập vào. 62 00:03:34,540 --> 00:03:38,870 Sau đó, trong phần tiếp theo, chúng ta đang bước vào thứ hai n người dùng nhập vào, và trong 63 00:03:38,870 --> 00:03:40,580 bên cạnh hai, n cuối cùng. 64 00:03:40,580 --> 00:03:44,200 >> Vì vậy, lưu ý rằng một mảng có kích thước ba không có bất cứ điều gì 65 00:03:44,200 --> 00:03:46,040 trong chỉ số ba. 66 00:03:46,040 --> 00:03:49,036 Đây không phải là hợp lệ. 67 00:03:49,036 --> 00:03:50,250 Được rồi. 68 00:03:50,250 --> 00:03:55,136 Vì vậy, sẽ trở lại đây. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Vì vậy, bây giờ mà chúng tôi đã xử lý với mảng, chúng tôi có một số quen thuộc. 71 00:04:01,590 --> 00:04:03,780 Bây giờ chúng ta sẽ chuyển sang lệnh đối số dòng, mà sẽ được 72 00:04:03,780 --> 00:04:05,890 khá liên quan đến vấn đề thiết lập này. 73 00:04:05,890 --> 00:04:09,670 >> Vì vậy, cho đến bây giờ, bất cứ khi nào bạn đã tuyên bố chức năng chính của bạn, chúng tôi đã 74 00:04:09,670 --> 00:04:11,230 nói int void main. 75 00:04:11,230 --> 00:04:14,070 Vì vậy, khoảng trống chỉ có nghĩa là chúng ta không đi qua bất kỳ 76 00:04:14,070 --> 00:04:16,440 đối số cho chức năng này. 77 00:04:16,440 --> 00:04:19,190 Bây giờ chúng ta sẽ thấy chính có thể mất một đối số. 78 00:04:19,190 --> 00:04:22,470 Ở đây chúng tôi gọi họ là int argc và chuỗi dấu ngoặc argv. 79 00:04:22,470 --> 00:04:26,930 Khung, một lần nữa, cho thấy mà chúng ta đang đối phó với mảng. 80 00:04:26,930 --> 00:04:31,850 Vì vậy, ở đây, khung chuỗi argv, chúng tôi đối phó với một mảng của chuỗi. 81 00:04:31,850 --> 00:04:35,360 Vì vậy, argc, đó là sẽ chỉ ra bao nhiêu lý lẽ chúng tôi đã 82 00:04:35,360 --> 00:04:37,580 thông qua chương trình này. 83 00:04:37,580 --> 00:04:46,050 Và để xem những gì có nghĩa là, chúng ta hãy đóng cửa này. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Vì vậy, cho đến bây giờ, chúng tôi đã chạy mỗi chương trình như lứa tuổi dot dấu gạch chéo. 86 00:04:50,790 --> 00:04:55,250 Chúng tôi cũng có thể, tại dòng lệnh, qua truyền tham số, do đó kỳ hạn, lệnh 87 00:04:55,250 --> 00:04:56,550 đối số dòng. 88 00:04:56,550 --> 00:04:59,760 Vì vậy, tham số đầu tiên, xin chào thế giới. 89 00:04:59,760 --> 00:05:03,350 Vì vậy, ở đây, argc sẽ là ba. 90 00:05:03,350 --> 00:05:07,720 Đó là số của các đối số tại dòng lệnh. 91 00:05:07,720 --> 00:05:12,840 Argc luôn luôn là ít nhất 1, kể từ khi chấm cắt giảm các lứa tuổi, chính nó, được tính là một trong những 92 00:05:12,840 --> 00:05:14,490 các đối số dòng lệnh. 93 00:05:14,490 --> 00:05:17,010 >> Sau đó xin chào là lần đầu tiên. 94 00:05:17,010 --> 00:05:20,460 Nếu lứa tuổi dot dấu gạch chéo là thứ không, sau đó xin chào là lần đầu tiên, và thế giới là 95 00:05:20,460 --> 00:05:22,830 thứ hai đối số dòng lệnh. 96 00:05:22,830 --> 00:05:29,490 Vì vậy, các chuỗi argv, chúng ta sẽ thấy, chứa các chuỗi, dấu chấm dấu gạch chéo 97 00:05:29,490 --> 00:05:33,830 lứa tuổi, xin chào, và thế giới. 98 00:05:33,830 --> 00:05:38,945 Và, theo yêu cầu của David, chúng ta sẽ để chơi một đoạn video giới thiệu đó. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO XEM LẠI] 101 00:05:43,890 --> 00:05:46,240 >> -Cho đến bây giờ trong chương trình chúng tôi đã bằng văn bản, chúng tôi đã tuyên bố 102 00:05:46,240 --> 00:05:48,500 chính như int void main. 103 00:05:48,500 --> 00:05:51,170 Và tất cả các thời gian này, khoảng trống đó có chỉ đơn giản được quy định cụ thể rằng 104 00:05:51,170 --> 00:05:54,430 chương trình không có bất kỳ đối số dòng lệnh. 105 00:05:54,430 --> 00:05:57,750 Nói cách khác, khi người dùng chạy một chương trình, họ có thể cung cấp lệnh 106 00:05:57,750 --> 00:06:01,710 đối số dòng bằng cách viết thêm từ hoặc cụm từ sau của chương trình 107 00:06:01,710 --> 00:06:03,000 tên tại dấu nhắc. 108 00:06:03,000 --> 00:06:06,550 >> Vâng, nếu bạn bạn muốn chương trình của bạn đối số dòng lệnh, một hoặc 109 00:06:06,550 --> 00:06:10,540 nhiều từ như vậy, chúng ta cần phải thay thế làm mất hiệu lực với một vài đối số. 110 00:06:10,540 --> 00:06:12,200 Vì vậy, hãy làm điều đó. 111 00:06:12,200 --> 00:06:15,750 Bao gồm CS50.h. 112 00:06:15,750 --> 00:06:19,360 Bao gồm io.h. tiêu chuẩn 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 Và bây giờ, thay vì bãi bỏ, tôi sẽ chỉ định một int argc, và một 115 00:06:26,330 --> 00:06:28,780 mảng các chuỗi được gọi là argv. 116 00:06:28,780 --> 00:06:31,820 Bây giờ, argc và argv là chỉ đơn giản là quy ước. 117 00:06:31,820 --> 00:06:34,000 >> Chúng ta có thể gọi là những lập luận hầu hết bất cứ điều gì chúng ta muốn. 118 00:06:34,000 --> 00:06:37,630 Nhưng điều quan trọng là argc là một int bởi vì, theo định nghĩa, đó là 119 00:06:37,630 --> 00:06:41,360 sẽ có các số tham số, số từ trong tổng số các 120 00:06:41,360 --> 00:06:43,380 dùng đã gõ tại dấu nhắc của mình. 121 00:06:43,380 --> 00:06:47,910 argv, trong khi đó, vector lập luận, là sẽ thực sự là một mảng lưu trữ 122 00:06:47,910 --> 00:06:52,020 tất cả các từ mà người sử dụng có gõ tại dấu nhắc của mình. 123 00:06:52,020 --> 00:06:54,500 >> Hãy tiến hành để làm một cái gì đó bây giờ với một hoặc nhiều các 124 00:06:54,500 --> 00:06:55,660 đối số dòng lệnh. 125 00:06:55,660 --> 00:07:00,070 Đặc biệt, chúng ta hãy đi trước và in bất cứ điều gì từ các loại sử dụng 126 00:07:00,070 --> 00:07:03,960 sau khi tên của chương trình tại dấu nhắc. 127 00:07:03,960 --> 00:07:04,730 Mở khung. 128 00:07:04,730 --> 00:07:06,240 Đóng khung. 129 00:07:06,240 --> 00:07:10,510 Printf phần trăm s dấu gạch chéo ngược và dấu phẩy. 130 00:07:10,510 --> 00:07:14,550 Và bây giờ tôi cần phải nói với printf những gì giá trị để cắm vào giữ chỗ đó. 131 00:07:14,550 --> 00:07:18,600 Tôi muốn từ đầu tiên mà người dùng có gõ sau khi tên của chương trình, 132 00:07:18,600 --> 00:07:23,130 và vì vậy tôi sẽ chỉ định argv khung 1, gần 133 00:07:23,130 --> 00:07:24,830 ngoặc đơn, dấu chấm phẩy. 134 00:07:24,830 --> 00:07:27,290 >> Bây giờ, tại sao khung 1 và không khung 0? 135 00:07:27,290 --> 00:07:30,990 Vâng, nó quay ra, tự động lưu trữ trong argv 0 là có được các 136 00:07:30,990 --> 00:07:32,620 tên thực tế của chương trình. 137 00:07:32,620 --> 00:07:36,180 Vì vậy, từ đầu tiên mà người dùng sau khi tên của chương trình là, bằng cách 138 00:07:36,180 --> 00:07:38,990 quy ước, sẽ được lưu trữ trong argv 1. 139 00:07:38,990 --> 00:07:42,380 Bây giờ chúng ta biên dịch và chạy chương trình này. 140 00:07:42,380 --> 00:07:47,780 >> Làm argv 0, dấu chấm dấu gạch chéo argv 0. 141 00:07:47,780 --> 00:07:50,520 Và bây giờ là một từ như xin chào. 142 00:07:50,520 --> 00:07:51,670 Nhập. 143 00:07:51,670 --> 00:07:53,520 Và chúng tôi đã có nó, xin chào. 144 00:07:53,520 --> 00:07:55,750 >> [END phát lại video] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: Được rồi. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Đóng cửa đó. 148 00:08:01,230 --> 00:08:16,730 Vì vậy, khi nhìn vào chương trình đó chúng tôi chỉ giới thiệu cho chúng tôi, tốt, chỉ cần 149 00:08:16,730 --> 00:08:24,710 cho thấy, nếu chúng ta in argv 0, làm cho, bây giờ nó là gì, argv 0, dấu chấm dấu gạch chéo argv 0. 150 00:08:24,710 --> 00:08:30,440 Vì vậy, như mong đợi, nó in ra tên của chương trình, vì argv 0 là 151 00:08:30,440 --> 00:08:32,970 luôn luôn có được sự tên của chương trình. 152 00:08:32,970 --> 00:08:35,640 Nhưng chúng ta hãy làm một cái gì đó bit thú vị hơn. 153 00:08:35,640 --> 00:08:42,080 >> Vì vậy, trong bộ vấn đề, bạn sẽ có giới thiệu với chức năng này, atoi. 154 00:08:42,080 --> 00:08:44,440 Vì vậy, những gì chúng ta sử dụng atoi cho? 155 00:08:44,440 --> 00:08:48,550 Đó là sẽ chuyển đổi một chuỗi số nguyên. 156 00:08:48,550 --> 00:08:53,280 Vì vậy, nếu tôi vượt qua chuỗi, một hai ba, để atoi, mà sẽ chuyển đổi đó 157 00:08:53,280 --> 00:08:56,910 đến số nguyên, một hai ba. 158 00:08:56,910 --> 00:09:01,480 Vì vậy, chúng ta sẽ chuyển đổi đầu tiên đối số dòng lệnh để một số nguyên, 159 00:09:01,480 --> 00:09:05,690 và sau đó chỉ cần in số nguyên. 160 00:09:05,690 --> 00:09:09,680 >> Vì vậy, về cơ bản, chúng tôi loại reimplementing getInt, chỉ cần 161 00:09:09,680 --> 00:09:12,350 số nguyên được nhập vào lệnh dòng thay vì trong chương trình 162 00:09:12,350 --> 00:09:14,560 tương tác. 163 00:09:14,560 --> 00:09:23,170 Vì vậy, sau đó, làm cho argv 0, chúng ta hãy làm nó ở đây, và đóng đó. 164 00:09:23,170 --> 00:09:27,670 Vì vậy, chạy argv 0, và chúng ta hãy nhập vào số nguyên, một hai ba bốn một hai. 165 00:09:27,670 --> 00:09:30,840 Vì vậy, nó sẽ in các số nguyên, một hai ba bốn một hai. 166 00:09:30,840 --> 00:09:35,500 Có một số tinh tế để atoi mà nó sẽ dừng lại quan tâm đến bất cứ điều gì 167 00:09:35,500 --> 00:09:39,040 xa hơn một ký tự số hợp lệ, nhưng điều đó không quan trọng. 168 00:09:39,040 --> 00:09:42,870 >> Vì vậy, những gì bạn nghĩ sẽ xảy ra nếu tôi làm điều này? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Lỗi phân khúc. 171 00:09:47,050 --> 00:09:50,410 Vì vậy, tại sao vậy? 172 00:09:50,410 --> 00:09:56,060 Nếu bạn nhìn lại chương trình của chúng tôi, chúng tôi chuyển đổi argv 1, tham số đầu tiên 173 00:09:56,060 --> 00:09:59,610 sau khi tên chương trình, một số nguyên. 174 00:09:59,610 --> 00:10:03,350 Nhưng không có lập luận thông qua sau khi tên chương trình. 175 00:10:03,350 --> 00:10:08,060 Vì vậy, ở đây, chúng ta thấy rằng đây là một lỗi chương trình, vì, nếu chúng ta cố gắng chạy nó 176 00:10:08,060 --> 00:10:10,530 mà không có bất kỳ đối số, nó sẽ chỉ sụp đổ. 177 00:10:10,530 --> 00:10:16,950 >> Vì vậy, một mô hình phổ biến, bạn sẽ thấy là một cái gì đó giống như, nếu argc ít 178 00:10:16,950 --> 00:10:21,100 hơn hai, chỉ ra rằng có không ít nhất là tên chương trình và một 179 00:10:21,100 --> 00:10:29,100 Đối số đầu tiên, sau đó chúng tôi sẽ làm một cái gì đó như printf, không đủ 180 00:10:29,100 --> 00:10:31,190 đối số dòng lệnh. 181 00:10:31,190 --> 00:10:33,170 Đó có lẽ không một tốt để in, nó có thể là một cái gì đó, như 182 00:10:33,170 --> 00:10:35,440 bạn nên nhập một số nguyên tại dòng lệnh. 183 00:10:35,440 --> 00:10:37,450 Tôi sẽ chỉ kết thúc ở đó. 184 00:10:37,450 --> 00:10:39,600 Và sau đó trở về 1. 185 00:10:39,600 --> 00:10:44,740 Vì vậy, hãy nhớ rằng vào cuối của chúng tôi chương trình, nếu chúng ta trở về 0, mà loại 186 00:10:44,740 --> 00:10:47,060 chỉ ra thành công. 187 00:10:47,060 --> 00:10:50,940 Và chính cũng tự động trả về 0 nếu bạn không. 188 00:10:50,940 --> 00:10:55,800 >> Vì vậy, ở đây, chúng ta đang retuning 1 để chỉ rằng đó không phải là thành công. 189 00:10:55,800 --> 00:11:01,000 Và bạn có thể trở lại bất cứ điều gì bạn muốn, chỉ, 0 chỉ thành công, và 190 00:11:01,000 --> 00:11:03,390 bất cứ điều gì khác chỉ ra thất bại. 191 00:11:03,390 --> 00:11:04,855 Vì vậy, hãy chạy phiên bản này của sự vật. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Vì vậy, bây giờ, nếu chúng ta không nhập dòng lệnh đối số, nó sẽ cho một cách chính xác 194 00:11:16,600 --> 00:11:18,290 chúng ta, không đủ dòng lệnh. 195 00:11:18,290 --> 00:11:20,610 Đã không hoàn thành câu. 196 00:11:20,610 --> 00:11:24,950 Khác, nếu chúng ta thực sự vượt qua nó một, nó có thể hoàn thành chương trình. 197 00:11:24,950 --> 00:11:27,920 Vì vậy, đây là cách bạn sẽ sử dụng trong argc Để xác nhận số 198 00:11:27,920 --> 00:11:30,630 đối số dòng lệnh đang thực sự được thông qua. 199 00:11:30,630 --> 00:11:39,360 >> Vì vậy, hãy làm cho chương trình này nhiều hơn một chút phức tạp, và nhìn vào thứ hai 200 00:11:39,360 --> 00:11:42,180 lặp đi lặp lại của sự vật. 201 00:11:42,180 --> 00:11:46,310 Vì vậy, bây giờ, chúng tôi không chỉ in đầu tiên đối số dòng lệnh. 202 00:11:46,310 --> 00:11:51,210 Ở đây, chúng ta đang lặp lại từ bình đẳng i int 0, i nhỏ hơn argc, tôi cộng 203 00:11:51,210 --> 00:11:55,280 cộng, và in ấn argv, chỉ số i. 204 00:11:55,280 --> 00:11:59,300 Vì vậy, mô hình này, một lần nữa, đây là cùng mô hình như trước, ngoại trừ thay vì 205 00:11:59,300 --> 00:12:02,600 gọi biến n, chúng tôi đang sử dụng argc. 206 00:12:02,600 --> 00:12:09,520 >> Vì vậy, đây được lặp lại trên mỗi chỉ số trong mảng, và in ấn mỗi 207 00:12:09,520 --> 00:12:11,910 phần tử trong mảng đó. 208 00:12:11,910 --> 00:12:20,300 Và như vậy, khi chúng tôi chạy chương trình này, tốt, Tôi không nhập bất kỳ dòng lệnh 209 00:12:20,300 --> 00:12:22,540 lập luận, vì vậy nó chỉ in tên chương trình. 210 00:12:22,540 --> 00:12:26,053 Nếu tôi nhập một loạt các thứ, nó sẽ in một, mỗi ngày một dòng riêng. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Vì vậy, chúng ta hãy thêm một bước này. 214 00:12:34,770 --> 00:12:38,890 Và thay vì in mỗi đối số trên một dòng riêng, chúng ta hãy in mỗi 215 00:12:38,890 --> 00:12:42,590 đặc tính của từng đối số trên một dòng riêng. 216 00:12:42,590 --> 00:12:46,700 Vì vậy, hãy nhớ rằng argv là một mảng các chuỗi. 217 00:12:46,700 --> 00:12:50,960 Vì vậy, một chuỗi là gì, nhưng một loạt các ký tự? 218 00:12:50,960 --> 00:12:57,140 Vì vậy, đó có nghĩa là argv thực sự là một mảng của một mảng các ký tự. 219 00:12:57,140 --> 00:13:04,920 Vì vậy, tận dụng lợi thế đó, chúng ta hãy bỏ qua điều này cho bây giờ. 220 00:13:04,920 --> 00:13:08,190 Chúng ta hãy xem xét các chuỗi argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Vì vậy, nếu chúng tôi muốn mang lại cho mỗi nhân vật của argv 0 trên một dòng riêng, sau đó tôi muốn 222 00:13:14,170 --> 00:13:19,500 để làm mô hình chúng tôi đang sử dụng để, tôi là ít hơn so với chiều dài của mảng, 223 00:13:19,500 --> 00:13:23,990 mà ở đây, là strlen của, đó là không phải những gì tôi muốn làm, chuỗi 224 00:13:23,990 --> 00:13:26,450 s bằng argv 0. 225 00:13:26,450 --> 00:13:30,390 Vì vậy, tôi là ít hơn so với chiều dài của chúng tôi mảng, mà trong trường hợp này là một mảng 226 00:13:30,390 --> 00:13:34,410 của các nhân vật, tôi cộng với cộng. 227 00:13:34,410 --> 00:13:41,040 Và như vậy, như chúng ta đã thấy tuần trước, đó là lý tưởng nếu chúng ta di chuyển mà strlen bên ngoài 228 00:13:41,040 --> 00:13:45,210 điều kiện, kể từ n sẽ được bổ sung thêm strlen của s mỗi lần chúng tôi đi 229 00:13:45,210 --> 00:13:47,720 thông qua các vòng lặp, và nó sẽ không được thay đổi. 230 00:13:47,720 --> 00:13:50,230 Vì vậy, chúng tôi sẽ thiết lập nó bằng n ở đây. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Vì vậy, bây giờ, chúng ta đang lặp lại trên mỗi chỉ số trong mảng. 234 00:14:01,320 --> 00:14:05,630 Và như vậy, nếu chúng ta muốn in mỗi nhân vật trong đó mảng, phần trăm c là 235 00:14:05,630 --> 00:14:06,880 cờ chúng tôi muốn sử dụng cho các nhân vật. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Và bây giờ là một i khung là có được các chuỗi, nhân vật chỉ số i, vì vậy nếu 238 00:14:19,770 --> 00:14:20,970 chuỗi là hello. 239 00:14:20,970 --> 00:14:27,530 sau đó s 0 là có được h, s khung 1 sẽ là e, và như vậy. 240 00:14:27,530 --> 00:14:30,800 >> Vì vậy, bây giờ chúng tôi muốn kết hợp hai điều này. 241 00:14:30,800 --> 00:14:35,440 Chúng tôi muốn in mỗi nhân vật của mỗi đối số dòng lệnh. 242 00:14:35,440 --> 00:14:38,950 Vì vậy, chúng ta sẽ có một lồng nhau cho vòng lặp. 243 00:14:38,950 --> 00:14:47,480 Theo quy ước, các truy cập đầu tiên là tôi, tiếp theo là có được j, n 244 00:14:47,480 --> 00:14:54,450 sẽ là strlen của argv i, i là nhỏ hơn n, tôi cộng với cộng. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Và bây giờ thay vì in ấn argv tôi, vì vậy argv khung tôi sẽ chỉ số - 247 00:15:06,870 --> 00:15:14,280 đó sẽ là dòng lệnh thứ i lập luận, argv i, j sẽ 248 00:15:14,280 --> 00:15:16,925 là nhân vật thứ j đối số thứ i. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Tôi sẽ thoát khỏi điều này ở đây bây giờ kể từ khi chúng tôi đặt nó vào vòng lặp đó. 251 00:15:24,810 --> 00:15:33,900 Như vậy là tương đương với chuỗi s bình đẳng argv tôi, và sau đó s khung j. 252 00:15:33,900 --> 00:15:36,980 >> Vâng, chúng ta không cần phải khai báo s biến này. 253 00:15:36,980 --> 00:15:44,530 Thay vào đó, chúng ta sẽ kết hợp các hai vào những gì chúng tôi đã có, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [nghe được]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: Tốt gọi. 257 00:15:49,680 --> 00:15:52,936 Vì vậy, đây là bị hỏng. 258 00:15:52,936 --> 00:15:55,510 Nếu tôi thực sự chạy nó, chúng ta sẽ đã nhận ra điều này. 259 00:15:55,510 --> 00:16:01,210 Vì vậy, quầy tôi quan tâm trong đặc biệt này 260 00:16:01,210 --> 00:16:05,410 vòng lặp là j, iterator. 261 00:16:05,410 --> 00:16:08,560 Vì vậy, bạn đã có thể chạy vào các vấn đề, có thể là một vòng lặp vô hạn, nếu chúng ta 262 00:16:08,560 --> 00:16:09,540 đã không cố định. 263 00:16:09,540 --> 00:16:12,220 Đó là lý do tại sao chúng tôi cũng đang nói về gỡ lỗi ngày hôm nay. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Vì vậy, hãy chạy chương trình này. 266 00:16:15,240 --> 00:16:21,200 Và chúng ta hãy thực sự thêm một printf riêng ngay tại đây mà chỉ cần sẽ in 267 00:16:21,200 --> 00:16:27,480 một dòng khác, vì điều này có nghĩa là khi chúng ta chạy chương trình, sẽ có một trống 268 00:16:27,480 --> 00:16:31,830 dòng ở giữa mỗi nhân vật của mỗi đối số dòng lệnh. 269 00:16:31,830 --> 00:16:33,448 Vâng, chúng ta sẽ thấy điều đó có nghĩa. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 Có một số lỗi. 273 00:16:39,870 --> 00:16:42,860 Lỗi ngầm tuyên bố chức năng thư viện strlen. 274 00:16:42,860 --> 00:16:51,630 >> Vì vậy, sẽ trở lại vào chương trình của chúng tôi, tôi quên băm bao gồm string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Vì vậy, string.h là có được các tập tin tiêu đề mà tuyên bố 277 00:16:57,730 --> 00:16:58,980 chức năng strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, nó biên dịch. 280 00:17:06,060 --> 00:17:09,109 Bây giờ, hãy chạy nó. 281 00:17:09,109 --> 00:17:10,930 Vì vậy, điều đó. 282 00:17:10,930 --> 00:17:17,790 Nó sẽ in ra của chúng tôi tên chương trình, xin chào thế giới. 283 00:17:17,790 --> 00:17:23,510 Nó sẽ in mỗi điều, mỗi nhân vật, trên một dòng riêng. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Vì vậy, hãy thực hiện việc này thêm một bước nữa. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Và thay vì sử dụng string.h, chúng ta hãy suy nghĩ về cách chúng tôi muốn thực hiện riêng của chúng tôi 288 00:17:39,700 --> 00:17:41,420 chức năng strlen. 289 00:17:41,420 --> 00:17:45,600 Vì vậy, tôi sẽ ngay lập tức cung cấp cho một chữ ký chức năng. 290 00:17:45,600 --> 00:17:52,900 Vì vậy, chúng ta hãy gọi trong my_strlen, và nó sẽ mất một chuỗi như một tham số, 291 00:17:52,900 --> 00:17:57,220 và chúng tôi hy vọng sẽ trở lại chiều dài của chuỗi. 292 00:17:57,220 --> 00:18:03,430 Vì vậy, nơi anh chàng đó? 293 00:18:03,430 --> 00:18:04,990 Vâng. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Vì vậy, nhớ từ slide trước đó cũng là từ tuần trước, rằng một 296 00:18:12,900 --> 00:18:18,890 mảng kí tự, tốt, một chuỗi, vì vậy hãy nói điều này là chuỗi s của chúng tôi. 297 00:18:18,890 --> 00:18:29,870 Vì vậy, nếu s là chuỗi, xin chào, sau đó, H-E-L-L-O, trong bộ nhớ, đó là sẽ 298 00:18:29,870 --> 00:18:35,610 được, và sau đó dấu gạch chéo ngược này 0 ký tự. 299 00:18:35,610 --> 00:18:39,170 >> Vì vậy, làm thế nào để chúng ta có được chiều dài của s? 300 00:18:39,170 --> 00:18:43,190 Vâng, các trick là tìm kiếm này phản ứng dữ dội 0 nhân vật, vô giá trị này 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Vì vậy, các thuật toán là đi là một cái gì đó như vài 303 00:18:50,270 --> 00:18:51,510 đủ ký tự - 304 00:18:51,510 --> 00:18:56,180 chúng ta hãy có tay này đại diện cho một số truy cập, chúng ta hãy gọi chiều dài int này. 305 00:18:56,180 --> 00:19:00,060 Vì vậy, bắt đầu từ trên đây, chúng tôi sẽ lặp qua chuỗi của chúng tôi. 306 00:19:00,060 --> 00:19:04,100 >> Vì vậy, các ký tự đầu tiên, đó là H, và nó không trở lại cắt giảm 0, do đó 307 00:19:04,100 --> 00:19:05,170 chiều dài là 1. 308 00:19:05,170 --> 00:19:08,050 Lặp với nhân vật tiếp theo, E, và nó không phải dấu gạch chéo ngược 0. 309 00:19:08,050 --> 00:19:09,630 Chiều dài là 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 Và cuối cùng, chúng ta đạt được dấu gạch chéo ngược 0, và như vậy có nghĩa là, tốt, 314 00:19:16,690 --> 00:19:17,780 chuỗi này là hơn. 315 00:19:17,780 --> 00:19:20,130 Vì vậy, chúng ta hãy quay trở lại 5. 316 00:19:20,130 --> 00:19:33,630 >> Vì vậy, thực sự thực hiện điều đó, đầu tiên, chiều dài n của tôi bằng 0, tay phải của tôi. 317 00:19:33,630 --> 00:19:36,088 Và chúng ta sẽ lặp - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [nghe được] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: Oh, bắn. 320 00:19:38,640 --> 00:19:39,870 Tốt cuộc gọi. 321 00:19:39,870 --> 00:19:42,680 Bùng nổ. 322 00:19:42,680 --> 00:19:44,140 Vì vậy, n chiều dài bằng 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Vì vậy, bây giờ, trong khi chiều dài s không bình đẳng và sau đó, dấu gạch chéo ngược 0. 325 00:19:58,310 --> 00:20:04,660 Vì vậy, hãy nhớ rằng, dấu gạch chéo ngược này 0, nó là một nhân vật thực tế, và nó cho thấy 326 00:20:04,660 --> 00:20:05,820 kết thúc của chuỗi. 327 00:20:05,820 --> 00:20:09,850 Cũng giống như, cũng, dấu gạch chéo ngược n là một nhân vật thực tế. 328 00:20:09,850 --> 00:20:14,040 Dấu gạch chéo ngược 0 sẽ chỉ cuối chuỗi của chúng tôi. 329 00:20:14,040 --> 00:20:15,414 Tôi không muốn đặt rằng có. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Và trong khi s được lập chỉ mục theo chiều dài không phải là bằng các terminator null, sau đó 332 00:20:25,620 --> 00:20:27,130 chúng ta chỉ cần đi để tăng chiều dài. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Vì vậy, sau đó, vào cuối chương trình của chúng tôi, chiều dài là cuối cùng sẽ 335 00:20:34,880 --> 00:20:37,610 là 5 trong trường hợp này. 336 00:20:37,610 --> 00:20:39,210 Và chúng tôi sẽ chỉ trả lại chiều dài. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Vì vậy, bây giờ xuống đây, tôi không làm my_strlen. 340 00:20:48,290 --> 00:20:50,700 Hãy biên dịch nó để đảm bảo tất cả mọi thứ chạy rất tốt. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Tôi đang làm gì trong 2? 343 00:20:58,210 --> 00:21:00,565 Hoặc là 1? 344 00:21:00,565 --> 00:21:01,940 Điều đó sẽ làm. 345 00:21:01,940 --> 00:21:02,690 Được rồi. 346 00:21:02,690 --> 00:21:08,490 Vì vậy, đây là argv 2. 347 00:21:08,490 --> 00:21:11,585 Hoạt động như dự kiến, mặc dù là một trong những tôi đã làm nó trong? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Vâng. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Phiên bản này của việc không có printf dòng mới sau, nhưng nó 352 00:21:21,820 --> 00:21:22,910 không thực hiện bất kỳ sự khác biệt. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Vì vậy, làm việc như mong đợi. 355 00:21:25,780 --> 00:21:34,750 >> Bây giờ chúng tôi thậm chí có thể kết hợp một bước hơn nữa, nơi đây thông báo, tốt, 356 00:21:34,750 --> 00:21:38,920 đầu tiên, chúng ta đang cầm strlen của argv i, và sau đó chúng tôi đang lặp lại trên 357 00:21:38,920 --> 00:21:41,450 mỗi nhân vật trong chuỗi. 358 00:21:41,450 --> 00:21:47,480 Vì vậy, thay vì làm điều đó, nếu chúng ta chỉ cần kết hợp logic này chờ đợi 359 00:21:47,480 --> 00:21:50,740 cho đến khi chúng ta đánh dấu chéo ngược đúng 0 vào việc này cho vòng lặp? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Vì vậy, trong khi lặp argv i, j không dấu gạch chéo ngược không bằng 0. 362 00:22:07,490 --> 00:22:10,680 Vì vậy, hãy chạy nó lần đầu tiên. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Được rồi. 365 00:22:21,180 --> 00:22:27,655 Vì vậy, ở đây, tình trạng này đang nói đến - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 chúng ta cần xóa đó. 368 00:22:40,060 --> 00:22:49,140 Vì vậy, bây giờ, để điều này là argv của chúng tôi. 369 00:22:49,140 --> 00:22:55,290 Vì vậy, khi tôi chỉ cần chạy chương trình trước đây, argv là một mảng của chuỗi. 370 00:22:55,290 --> 00:23:03,100 Và như vậy, nếu tôi chạy nó với dấu chấm dấu gạch chéo argv 2, hello thế giới, sau đó argv 371 00:23:03,100 --> 00:23:07,650 chính nó là chiều dài 3, cho argv bằng không, xin chào, và thế giới. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Và bên trong của mỗi của các chỉ số là, bản thân một mảng, nơi này sẽ có 374 00:23:19,660 --> 00:23:23,780 dot, đây sẽ là dấu gạch chéo, tôi không biết nếu đó là đúng hướng, tôi 375 00:23:23,780 --> 00:23:25,680 không nghĩ rằng nó là. 376 00:23:25,680 --> 00:23:30,110 A-R-V gạch ngang, cần nhiều không gian hơn. 377 00:23:30,110 --> 00:23:32,570 Chúng ta hãy cắt vào mảng này. 378 00:23:32,570 --> 00:23:38,230 A-R-V gạch ngang 0, và sau đó dấu gạch chéo ngược 0. 379 00:23:38,230 --> 00:23:43,160 Và sau đó trong tình trạng hỗn loạn sẽ chào. 380 00:23:43,160 --> 00:23:45,910 Hãy nói rằng, H-E dấu gạch chéo ngược 0. 381 00:23:45,910 --> 00:23:51,130 Và cuối cùng, W-O dấu gạch chéo ngược 0. 382 00:23:51,130 --> 00:23:59,730 >> Vì vậy, các thuật toán mà chúng ta vừa viết, lồng nhau cho các vòng, những gì họ đang 383 00:23:59,730 --> 00:24:07,321 làm là, đầu tiên chúng ta có chống lại tôi và sau đó j. 384 00:24:07,321 --> 00:24:15,206 Điều này sẽ dễ dàng hơn với mã trên màn hình, Chúng ta hãy quay trở lại này. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Vì vậy, nhận thấy rằng tôi là lặp đó là lặp lại trên mỗi lệnh 387 00:24:24,600 --> 00:24:25,610 đối số dòng. 388 00:24:25,610 --> 00:24:28,870 Và j là iterating lặp trên mỗi nhân vật trong đó 389 00:24:28,870 --> 00:24:30,410 đối số dòng lệnh. 390 00:24:30,410 --> 00:24:46,755 Vì vậy, những gì printf trong cùng này đang làm được, chúng tôi đã printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2, 0 3, 0 4, 0 5, 0 6, nhưng bây giờ, argv 0 7 sẽ 392 00:24:58,680 --> 00:25:00,670 dấu gạch chéo ngược bằng 0. 393 00:25:00,670 --> 00:25:05,730 >> Vì vậy, sau đó chúng ta thoát khỏi đó cho vòng lặp, và bây giờ tôi lặp 1. 394 00:25:05,730 --> 00:25:10,910 Và bây giờ chúng ta sẽ in argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 tốt, bây giờ, kể từ khi tôi cắt ngắn chào, argv 1 2 một lần nữa sẽ là 396 00:25:17,040 --> 00:25:18,170 dấu gạch chéo ngược 0. 397 00:25:18,170 --> 00:25:25,050 Và vì vậy, tăng i và tiếp tục, và như vậy, cho đến khi chúng ta in ra tất cả các 398 00:25:25,050 --> 00:25:28,580 thế giới, và đó là ba dòng lệnh lập luận, và chúng tôi sẽ thoát ra khỏi 399 00:25:28,580 --> 00:25:31,670 vòng ngoài cùng, và hoàn thành chương trình của chúng tôi. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Vì vậy, chúng ta hãy trở lại đây. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Vì vậy, bạn sẽ đạt được một số hiểu biết về đối số dòng lệnh này 406 00:25:52,370 --> 00:25:54,460 vấn đề cụ thể thiết lập. 407 00:25:54,460 --> 00:25:56,630 >> Bây giờ, gỡ lỗi. 408 00:25:56,630 --> 00:26:01,680 Vì vậy, bạn có lẽ đã phải làm một số lỗi với trước đó của bạn 409 00:26:01,680 --> 00:26:03,120 vấn đề thiết lập. 410 00:26:03,120 --> 00:26:08,420 Và một cách rất dễ dàng gỡ lỗi, đầu tiên, chúng ta hãy xem xét một chương trình lỗi. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Vâng, đi bộ qua chương trình này, chúng tôi sẽ yêu cầu người dùng cho một 413 00:26:23,830 --> 00:26:29,350 số nguyên, lấy số nguyên, và sau đó, tùy tiện, chúng tôi có một vòng lặp trong khi đó 414 00:26:29,350 --> 00:26:32,280 chỉ là sẽ làm giảm giá trị tôi cho đến khi nó bằng 10. 415 00:26:32,280 --> 00:26:35,820 Chúng ta hãy giả sử tôi đang nhập một số nguyên lớn hơn 10. 416 00:26:35,820 --> 00:26:38,700 Vì vậy, làm giảm giá trị tôi cho đến khi nó bằng 10. 417 00:26:38,700 --> 00:26:42,630 >> Và sau đó chúng tôi có một vòng lặp trong khi rằng, trong khi tôi không bằng 0, chúng ta 418 00:26:42,630 --> 00:26:44,540 sẽ làm giảm giá trị i 3. 419 00:26:44,540 --> 00:26:49,790 Vì vậy, nếu bạn nhìn thấy mục đích của lỗi ở đây, nó rằng điều này sẽ làm giảm giá trị i cho 420 00:26:49,790 --> 00:26:57,010 là 10, và sau đó điều này trong khi vòng lặp ý lượng giảm của i từ 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 để tiêu cực 2, để tiêu cực 5, và như vậy, từ âm vô cùng, vì tôi sẽ 422 00:27:02,880 --> 00:27:05,920 không bao giờ thực sự bằng 0. 423 00:27:05,920 --> 00:27:08,610 Và sau đó vào cuối của chương trình này, chúng tôi có chức năng foo là 424 00:27:08,610 --> 00:27:12,130 xảy ra in ra rằng tôi. 425 00:27:12,130 --> 00:27:16,520 >> Vì vậy, đây là một chương trình ngắn và tầm thường, và lỗi này là hiển nhiên, 426 00:27:16,520 --> 00:27:18,790 đặc biệt là sau khi tôi chỉ nói những gì là lỗi. 427 00:27:18,790 --> 00:27:24,840 Nhưng mục đích ở đây là, tốt, điều này có thể thực sự trông giống như một số bạn 428 00:27:24,840 --> 00:27:30,040 các giải pháp từ tham lam từ cuối vấn đề thiết lập, và có thể bạn có 429 00:27:30,040 --> 00:27:32,800 một số vòng lặp vô hạn trong chương trình của bạn, và bạn không có ý tưởng 430 00:27:32,800 --> 00:27:34,100 những gì gây ra nó. 431 00:27:34,100 --> 00:27:38,690 Vì vậy, một kỹ thuật gỡ lỗi rất hữu ích là chỉ cần thêm printfs 432 00:27:38,690 --> 00:27:40,180 trên tất cả các mã. 433 00:27:40,180 --> 00:27:49,200 >> Vì vậy, ở đây tôi muốn có một printf bên ngoài đầu tiên vòng lặp while. 434 00:27:49,200 --> 00:27:53,155 Và ở đây tôi muốn có một printf, và tôi sẽ chỉ cần in tôi. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Tôi thậm chí sẽ làm đầu tiên khi vòng lặp, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Bên ngoài, thứ hai khi vòng lặp. 439 00:28:09,040 --> 00:28:12,170 Một lần nữa, in bên trong đây, giá trị i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 Và chúng ta hãy chạy này. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Vì vậy, dấu chấm dấu gạch chéo gỡ lỗi. 444 00:28:24,800 --> 00:28:25,610 Nhập một số nguyên. 445 00:28:25,610 --> 00:28:28,150 Chúng ta hãy làm 13. 446 00:28:28,150 --> 00:28:28,760 Và sự bùng nổ. 447 00:28:28,760 --> 00:28:33,300 Chúng ta thấy rằng chúng ta là vòng lặp vô hạn bên trong vòng lặp trong khi thứ hai. 448 00:28:33,300 --> 00:28:36,305 Vì vậy, bây giờ chúng tôi biết những gì là lỗi. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Nhưng printf gỡ lỗi là hoàn toàn tuyệt vời, nhưng một khi chương trình của bạn được 451 00:28:45,610 --> 00:28:50,560 dài hơn và phức tạp hơn, có các giải pháp tinh vi hơn để 452 00:28:50,560 --> 00:28:51,705 nhận những điều làm việc. 453 00:28:51,705 --> 00:28:52,955 Vì vậy, hãy loại bỏ tất cả các printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Và hãy chắc chắn rằng tôi đã không phá vỡ bất cứ điều gì. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Vì vậy, các chương trình chúng ta sẽ giới thiệu được gọi là 458 00:29:14,180 --> 00:29:16,715 GDB, cho GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Vâng, thực sự, chúng ta hãy loại bỏ gỡ lỗi cho một giây, và làm cho gỡ lỗi một lần nữa. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Vâng, thực sự đầu tiên, một bài học tốt trong đối số dòng lệnh. 463 00:29:34,440 --> 00:29:37,780 Chú ý rằng lệnh Clang này đó là biên dịch tất cả mọi thứ đang được thông qua 464 00:29:37,780 --> 00:29:41,300 tại dòng lệnh, các đối số dòng lệnh. 465 00:29:41,300 --> 00:29:46,250 Vì vậy, chính xác làm thế nào bạn sẽ được sử dụng đối số dòng lệnh, như chúng ta 466 00:29:46,250 --> 00:29:51,500 đã làm trước đây, và như bạn sẽ ở PSET 2, đó là cách kêu vang được sử dụng chúng. 467 00:29:51,500 --> 00:30:00,070 >> Vì vậy, nhận thấy rằng lần đầu tiên lá cờ, dấu gạch ngang này ggdb3, đó là những gì nói là, kêu vang, 468 00:30:00,070 --> 00:30:03,790 bạn nên biên dịch tập tin này với Mục đích mà chúng ta sẽ dần dần 469 00:30:03,790 --> 00:30:05,380 cần phải gỡ lỗi nó. 470 00:30:05,380 --> 00:30:13,840 Vì vậy, miễn là bạn có lá cờ đó, sau đó chúng ta có thể GDB gỡ lỗi. 471 00:30:13,840 --> 00:30:17,380 Và nó sẽ mở ra các GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Vì vậy, có rất nhiều các lệnh mà bạn cần phải làm quen với. 473 00:30:22,920 --> 00:30:27,100 Người đầu tiên mà bạn sẽ có thể ngay lập tức cần là Run. 474 00:30:27,100 --> 00:30:28,200 Vì vậy, những gì đang chạy sẽ làm gì? 475 00:30:28,200 --> 00:30:30,910 Nó sẽ bắt đầu chương trình của chúng tôi. 476 00:30:30,910 --> 00:30:36,180 Vì vậy, chạy, chương trình bắt đầu, chương trình đòi hỏi chúng ta cho một số nguyên, 13. 477 00:30:36,180 --> 00:30:39,170 Và sau đó nó vòng lặp vô hạn như dự kiến, ngoại trừ tôi loại bỏ các 478 00:30:39,170 --> 00:30:40,500 printfs, vì vậy chúng tôi thậm chí không thấy điều đó. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Đã thoát bình thường. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Có thể là nó được bao bọc tất cả các con đường xung quanh, trở lại - bỏ qua mà. 484 00:30:53,640 --> 00:30:55,170 Giả sử nó đã không thoát khỏi bình thường. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Có một câu trả lời phức tạp đó. 487 00:31:03,370 --> 00:31:07,890 >> Vì vậy, bây giờ, đó không phải là rất hữu ích. 488 00:31:07,890 --> 00:31:11,480 Vì vậy, chỉ cần chạy chương trình của chúng tôi bên trong sửa lỗi này không giúp chúng tôi trong bất kỳ 489 00:31:11,480 --> 00:31:15,610 cách, vì chúng ta có thể chỉ cần thực hiện dot giảm gỡ lỗi từ bên ngoài GDB. 490 00:31:15,610 --> 00:31:21,250 Vì vậy, một lệnh bạn sẽ có thể - 491 00:31:21,250 --> 00:31:22,970 và tôi sẽ bỏ thuốc lá này. 492 00:31:22,970 --> 00:31:25,850 Kiểm soát-d hoặc bỏ thuốc lá, cả hai công việc. 493 00:31:25,850 --> 00:31:29,550 Vì vậy, hãy mở nó lên một lần nữa. 494 00:31:29,550 --> 00:31:31,130 >> Lệnh khác mà bạn sẽ có thể ngay lập tức muốn 495 00:31:31,130 --> 00:31:33,600 được sử dụng để là Break. 496 00:31:33,600 --> 00:31:37,120 Vì vậy, chúng tôi sẽ phá vỡ trên chính hiện nay, và sau đó tôi sẽ giải thích đó. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Vâng, ở đây chúng ta thấy chúng ta thiết lập một breakpoint ở dòng này trong debug.c. 499 00:31:46,370 --> 00:31:50,160 Vì vậy, những gì là phương tiện phá vỡ khi tôi gõ chạy, chương trình sẽ 500 00:31:50,160 --> 00:31:53,560 tiếp tục chạy cho đến khi Tôi nhấn một điểm dừng. 501 00:31:53,560 --> 00:31:59,390 Vì vậy, khi tôi nhấn chạy, chương trình bắt đầu, và sau đó nó phá vỡ ngay sau khi nó 502 00:31:59,390 --> 00:32:01,940 đi vào các chức năng chính. 503 00:32:01,940 --> 00:32:06,930 Phá vỡ chính là có được một cái gì đó bạn khá thường làm. 504 00:32:06,930 --> 00:32:11,340 >> Và bây giờ, giới thiệu với bạn một số lệnh khác. 505 00:32:11,340 --> 00:32:14,330 Chú ý ở đây, mà nó nói rằng chúng tôi đã phá vỡ tại dòng 11, đó là 506 00:32:14,330 --> 00:32:16,230 printf, nhập một số nguyên. 507 00:32:16,230 --> 00:32:21,260 Vì vậy, các lệnh tiếp theo sẽ là như thế nào chúng tôi đi đến dòng tiếp theo của mã. 508 00:32:21,260 --> 00:32:24,810 Điều này sẽ cho phép chúng ta bước thông qua đường dây chương trình của chúng tôi bằng dòng. 509 00:32:24,810 --> 00:32:26,260 Vì vậy, tiếp theo. 510 00:32:26,260 --> 00:32:29,820 >> Tại dòng 12, chúng ta sẽ để có được những số nguyên. 511 00:32:29,820 --> 00:32:30,450 Tiếp theo. 512 00:32:30,450 --> 00:32:34,290 Và nếu bạn chỉ cần nhấn Enter lần nữa, nó sẽ làm lại điều cuối cùng bạn đã làm. 513 00:32:34,290 --> 00:32:36,480 Vì vậy tôi không cần phải gõ tiếp theo mỗi lần. 514 00:32:36,480 --> 00:32:40,100 Vì vậy, nhập một số nguyên, 13. 515 00:32:40,100 --> 00:32:46,940 Vì vậy, bây giờ, dòng 14, trong khi tôi lớn hơn 10, và tôi sẽ làm gì tiếp theo. 516 00:32:46,940 --> 00:32:48,685 Và chúng ta thấy chúng ta sẽ giảm giá trị của tôi. 517 00:32:48,685 --> 00:32:50,210 Vì vậy, chúng ta sẽ giảm giá trị của tôi một lần nữa. 518 00:32:50,210 --> 00:32:53,620 >> Vì vậy, bây giờ, khác hữu ích lệnh Print. 519 00:32:53,620 --> 00:32:55,750 Vì vậy, In sẽ in ra giá trị của biến. 520 00:32:55,750 --> 00:32:57,825 Hãy đưa ra các giá trị của tôi biến. 521 00:32:57,825 --> 00:32:58,705 Hãy in i. 522 00:32:58,705 --> 00:33:00,910 Nó sẽ nói rằng tôi là 11. 523 00:33:00,910 --> 00:33:03,330 Bây giờ chúng ta Next một lần nữa trong khi i lớn hơn 10. 524 00:33:03,330 --> 00:33:05,590 Vì vậy, tôi vẫn lớn hơn 10, kể từ khi nó 11. 525 00:33:05,590 --> 00:33:06,920 i trừ trừ. 526 00:33:06,920 --> 00:33:08,250 Hãy in tôi một lần nữa. 527 00:33:08,250 --> 00:33:10,950 Như mong đợi, đó là 10. 528 00:33:10,950 --> 00:33:12,510 >> Vì vậy, bây giờ, tiếp theo. 529 00:33:12,510 --> 00:33:16,250 Nó sẽ trở lại tình trạng này, tôi là lớn hơn 10, nhưng bây giờ tôi là 10, vì vậy 530 00:33:16,250 --> 00:33:20,040 nó không lớn hơn 10, vì vậy chúng tôi mong đợi nó rơi ra khỏi vòng lặp trong khi. 531 00:33:20,040 --> 00:33:22,220 Và bây giờ chúng tôi dưới đây dòng mã. 532 00:33:22,220 --> 00:33:28,750 Và một lệnh, Danh sách, chỉ là đi để hiển thị trước và sau 533 00:33:28,750 --> 00:33:31,240 vài dòng mã, trong trường hợp bạn bị mất chính mình. 534 00:33:31,240 --> 00:33:35,420 Vì vậy, chúng ta chỉ cần thoát vòng lặp trong khi điều này, và bây giờ chúng tôi đã nhập này 535 00:33:35,420 --> 00:33:37,080 trong khi vòng lặp, dòng 18. 536 00:33:37,080 --> 00:33:39,860 Vì vậy, trong khi tôi không bằng 0. 537 00:33:39,860 --> 00:33:46,570 Và, sau đó, tôi bằng i trừ 3, và chúng tôi sẽ nhận thấy, điều này sẽ chỉ tiếp tục đi. 538 00:33:46,570 --> 00:33:48,270 Và chúng ta có thể in i. 539 00:33:48,270 --> 00:33:49,990 >> Mỗi lệnh loại có phím tắt. 540 00:33:49,990 --> 00:33:51,720 Vì vậy, p là viết tắt của In. 541 00:33:51,720 --> 00:33:53,400 Vì vậy chúng tôi có thể p i. 542 00:33:53,400 --> 00:33:57,550 Chỉ cần giữ giữ n, hoặc tiếp tục làm tiếp. 543 00:33:57,550 --> 00:33:58,340 In tôi một lần nữa. 544 00:33:58,340 --> 00:34:00,380 Bạn nhìn thấy bây giờ là tiêu cực 167. 545 00:34:00,380 --> 00:34:06,030 Vì vậy, đây sẽ đi mãi mãi, nhưng không thực sự mãi mãi, kể từ khi bạn chỉ nhìn thấy, nó 546 00:34:06,030 --> 00:34:09,330 thực sự sẽ kết thúc tại một số điểm. 547 00:34:09,330 --> 00:34:15,699 >> Vì vậy, đó là điểm bắt đầu GDB. 548 00:34:15,699 --> 00:34:19,504 Nhưng chúng ta hãy làm một điều nữa trong GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, gỡ lỗi. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Vì vậy, trong trường hợp cụ thể này, vòng lặp vô hạn xảy ra để được bên trong 552 00:34:28,534 --> 00:34:30,050 các chức năng chính. 553 00:34:30,050 --> 00:34:35,779 Và bây giờ, chỉ cần chấp nhận rằng tôi sẽ di chuyển vào vòng lặp vô hạn 554 00:34:35,779 --> 00:34:37,029 foo chức năng. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Chỉ cần nhớ rằng, vào cuối này chương trình, tốt, điều này đã được ban đầu 557 00:34:43,730 --> 00:34:46,210 gọi foo, mà chỉ sẽ in i. 558 00:34:46,210 --> 00:34:51,880 Nhưng bây giờ chúng tôi đang gọi điện thoại foo, đó là sẽ làm giảm giá trị tôi cho đến khi nó 0, và 559 00:34:51,880 --> 00:34:54,548 sau đó in biến đó. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Tiết kiệm đó. 562 00:34:57,970 --> 00:35:00,175 Làm cho gỡ lỗi. 563 00:35:00,175 --> 00:35:03,310 Và bây giờ, gdb gỡ lỗi. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Vì vậy, nếu tôi chỉ cần chạy sau đó tôi sẽ không có thể thực sự bước qua tôi 566 00:35:10,580 --> 00:35:11,730 chương trình dòng-by-line. 567 00:35:11,730 --> 00:35:19,820 Vì vậy, chúng ta hãy phá vỡ tại chính, và sau đó gõ chạy. 568 00:35:19,820 --> 00:35:28,160 Vì vậy, đi qua này, printf, nhập một số nguyên, có được số nguyên, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Vì vậy, chúng tôi sẽ tiếp tục decrementing cho đến khi tôi lớn hơn 10. 571 00:35:37,490 --> 00:35:42,840 Sau đó chúng ta sẽ rơi qua trong khi vòng lặp, và nhận được đến dòng - 572 00:35:42,840 --> 00:35:44,364 chúng ta hãy mở nó lên trong một cửa sổ riêng biệt. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Vì vậy, chúng ta giảm đi cho đến khi tôi không còn lớn hơn 10, và sau đó chúng tôi 575 00:35:53,300 --> 00:35:55,700 gọi là chức năng, foo. 576 00:35:55,700 --> 00:36:01,340 >> Vì vậy, những gì đã xảy ra ngay sau khi tôi nhấn foo chức năng, tốt, tôi gọi là foo, và 577 00:36:01,340 --> 00:36:04,030 sau đó tôi không còn kiểm soát GDB. 578 00:36:04,030 --> 00:36:10,230 Vì vậy, ngay sau khi tôi nhấn Next ở dòng này, điều tiếp tục cho đến khi điều này xảy ra, 579 00:36:10,230 --> 00:36:12,400 mà chương trình đã thoát khi - 580 00:36:12,400 --> 00:36:14,450 giả sử nó đã không tồn tại cuối cùng. 581 00:36:14,450 --> 00:36:16,390 Bạn nhìn thấy nó dừng lại một chút mặc dù. 582 00:36:16,390 --> 00:36:22,040 Tại sao tôi lại mất kiểm soát chương trình tại thời điểm đó? 583 00:36:22,040 --> 00:36:27,540 Vâng, khi tôi gõ tiếp theo, mà đi đến nghĩa đen dòng tiếp theo của mã 584 00:36:27,540 --> 00:36:28,850 sẽ thực hiện. 585 00:36:28,850 --> 00:36:35,950 Vì vậy, sau khi dòng 21, dòng tiếp theo của mã mà sẽ thực hiện là dòng 22, 586 00:36:35,950 --> 00:36:38,520 đó là, rút ​​lui khỏi chính. 587 00:36:38,520 --> 00:36:43,810 Vì vậy, tôi không muốn chỉ đi đến dòng kế tiếp của mã. 588 00:36:43,810 --> 00:36:48,170 Tôi muốn đi vào các chức năng, foo, và sau đó cũng bước qua 589 00:36:48,170 --> 00:36:49,830 những dòng mã. 590 00:36:49,830 --> 00:36:53,726 >> Vì vậy, cho rằng, chúng ta có một sự thay thế. 591 00:36:53,726 --> 00:36:56,770 Chúng ta hãy bỏ một lần nữa. 592 00:36:56,770 --> 00:36:58,020 Phá vỡ chính. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, tiếp theo, tiếp theo, 13, tiếp theo, tiếp theo, tiếp theo, cẩn thận, 595 00:37:06,370 --> 00:37:09,820 trước khi chúng tôi đánh dòng foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Vì vậy, bây giờ, chúng ta đang ở dòng 21, nơi mà chúng tôi gọi foo. 598 00:37:13,700 --> 00:37:17,100 Chúng tôi không muốn gõ tiếp theo, vì đó sẽ chỉ gọi hàm foo, và 599 00:37:17,100 --> 00:37:18,710 đi vào dòng tiếp theo của mã. 600 00:37:18,710 --> 00:37:20,840 Bước những gì chúng tôi muốn sử dụng là. 601 00:37:20,840 --> 00:37:25,690 Do đó, có một sự khác biệt giữa Bước và Tiếp theo, nơi Bước bước vào 602 00:37:25,690 --> 00:37:28,190 chức năng, và tiếp theo đi trong chức năng. 603 00:37:28,190 --> 00:37:32,830 Nó chỉ thực hiện toàn bộ chức năng và giữ đi. 604 00:37:32,830 --> 00:37:37,210 >> Vì vậy, Bước sẽ mang lại cho chúng tôi vào chức năng, foo. 605 00:37:37,210 --> 00:37:41,160 Và chúng tôi thấy ở đây, bây giờ, chúng tôi lại này vòng lặp trong khi đó, về mặt lý thuyết, 606 00:37:41,160 --> 00:37:44,190 sẽ tiếp tục mãi mãi. 607 00:37:44,190 --> 00:37:50,420 Và nếu bạn nhấn bước, khi nó không phải là thậm chí một chức năng gọi, sau đó nó 608 00:37:50,420 --> 00:37:51,720 giống Next. 609 00:37:51,720 --> 00:37:55,320 Vì vậy, nó chỉ khi bạn đang ở một dòng đang kêu gọi một chức năng mà Bước 610 00:37:55,320 --> 00:37:56,970 sẽ khác với Next. 611 00:37:56,970 --> 00:37:57,930 Vì vậy, bước sẽ mang lại cho chúng tôi ở đây. 612 00:37:57,930 --> 00:38:02,100 Bước, bước, bước, bước, bước, bước, và chúng ta sẽ chỉ là vòng lặp vô hạn mãi mãi. 613 00:38:02,100 --> 00:38:06,810 >> Vì vậy, bạn có thể có được sử dụng đó như bạn cách xác định vòng lặp vô hạn, là 614 00:38:06,810 --> 00:38:08,960 chỉ giữ này phím Enter để xem nơi bạn gặp khó khăn. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Có nhiều cách tốt hơn để làm điều đó, nhưng bây giờ, đó là hoàn toàn đầy đủ. 617 00:38:14,780 --> 00:38:17,967 Và phong cách, phù hợp với phong cách 50, tôi nên đã làm điều này. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Vì vậy, một lệnh cuối cùng để giới thiệu. 621 00:38:28,400 --> 00:38:30,810 Vâng, chúng ta hãy gdb gỡ lỗi in 622 00:38:30,810 --> 00:38:35,580 Vì vậy, thay vì vi phạm tại chính, nếu tôi biết hàm foo cũng là 623 00:38:35,580 --> 00:38:39,230 vấn đề, sau đó tôi có thể chỉ nói, phá vỡ tại foo, thay thế. 624 00:38:39,230 --> 00:38:42,310 Hãy nói rằng tôi phá vỡ tại cả hai chính và foo. 625 00:38:42,310 --> 00:38:45,390 Vì vậy, bạn có thể thiết lập nhiều điểm ngắt như bạn muốn. 626 00:38:45,390 --> 00:38:49,230 Khi tôi gõ chạy, nó sẽ dừng lại ở - 627 00:38:49,230 --> 00:38:52,180 ooh, hãy biên dịch lại, vì Tôi đã thay đổi mọi thứ. 628 00:38:52,180 --> 00:38:55,950 Bạn sẽ thấy dòng, cảnh báo, nguồn này tập tin mới hơn thực thi. 629 00:38:55,950 --> 00:38:59,680 Vì vậy, đó có nghĩa là tôi chỉ đi vào đây và thay đổi chúng cho phù hợp với phong cách 630 00:38:59,680 --> 00:39:03,100 50, nhưng tôi đã không biên dịch lại chương trình. 631 00:39:03,100 --> 00:39:04,870 Vì vậy, GDB làm cho tôi nhận thức được rằng. 632 00:39:04,870 --> 00:39:10,130 Tôi sẽ bỏ thuốc lá, làm cho gỡ lỗi một lần nữa, nhấn gdb gỡ lỗi. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Vì vậy, bây giờ, trở lại với những gì tôi đang làm. 635 00:39:12,800 --> 00:39:15,720 Phá vỡ chính, nghỉ foo. 636 00:39:15,720 --> 00:39:20,680 Bây giờ nếu tôi chạy chương trình, do đó, nó sẽ tiếp tục cho đến khi truy cập một 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 Breakpoint điều đó xảy ra là người đầu tiên tại chính. 639 00:39:24,680 --> 00:39:28,630 Bây giờ, thay vì làm tiếp theo, tiếp theo, tiếp theo, tiếp theo, tiếp theo, cho đến khi tôi nhấn foo, tôi 640 00:39:28,630 --> 00:39:35,230 có thể gõ tiếp tục, sẽ tiếp tục cho đến khi bạn nhấn breakpoint tiếp theo. 641 00:39:35,230 --> 00:39:37,200 Tôi phải nhập số nguyên đầu tiên. 642 00:39:37,200 --> 00:39:40,570 Tiếp tục sẽ tiếp tục cho đến khi tôi nhấn điểm dừng tiếp theo, đó là 643 00:39:40,570 --> 00:39:43,320 chức năng của foo. 644 00:39:43,320 --> 00:39:50,130 >> Vì vậy, Run sẽ chạy cho đến khi bạn nhấn một breakpoint, nhưng bạn chỉ gõ chạy khi 645 00:39:50,130 --> 00:39:54,060 bạn đang bắt đầu chương trình, và sau đó, từ đó, nó tiếp tục. 646 00:39:54,060 --> 00:40:01,950 Nếu tôi chỉ làm phá vỡ chính và sau đó chạy, nó sẽ phá vỡ tại 647 00:40:01,950 --> 00:40:03,670 chính, và sau đó tiếp tục. 648 00:40:03,670 --> 00:40:10,050 Vì tôi không có một điểm break ở foo, nhập số nguyên, sau đó bây giờ tôi 649 00:40:10,050 --> 00:40:11,380 sẽ không phá vỡ tại foo. 650 00:40:11,380 --> 00:40:16,318 Nó chỉ sẽ vô hạn vòng lặp cho đến khi đó. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Vì vậy, đó là Giới thiệu đến GDB. 654 00:40:24,420 --> 00:40:27,790 Bạn nên bắt đầu sử dụng nó trong bộ vấn đề của bạn. 655 00:40:27,790 --> 00:40:30,550 Nó có thể rất hữu ích để xác định lỗi. 656 00:40:30,550 --> 00:40:35,280 Nếu bạn thực sự chỉ cần, line-by-line, đi thông qua mã của bạn, và so sánh là những gì 657 00:40:35,280 --> 00:40:39,740 thực sự xảy ra với những gì bạn mong đợi xảy ra, sau đó nó đẹp 658 00:40:39,740 --> 00:40:41,060 khó khăn để bỏ lỡ lỗi của bạn. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Vì vậy, tuần trước David lớn lên này thứ mật mã bí mật quan trọng đối với 663 00:40:54,040 --> 00:40:59,350 lần đầu tiên, nơi mà chúng tôi không muốn các mật khẩu được lưu trữ trên của chúng tôi 664 00:40:59,350 --> 00:41:03,210 máy tính trong một số tập tin văn bản đơn giản, nơi ai đó có thể đi qua và chỉ 665 00:41:03,210 --> 00:41:04,660 mở nó lên và đọc chúng. 666 00:41:04,660 --> 00:41:07,530 Lý tưởng nhất, họ sẽ được mã hóa một cách nào đó. 667 00:41:07,530 --> 00:41:13,340 Và trong vấn đề Set 2, bạn sẽ được giao dịch với một phương pháp mã hóa, 668 00:41:13,340 --> 00:41:16,520 hay, tốt, hai phương pháp, nhưng họ không tuyệt vời như vậy. 669 00:41:16,520 --> 00:41:20,050 Nếu bạn làm phiên bản của hacker, bạn cũng sẽ được xử lý 670 00:41:20,050 --> 00:41:22,150 giải mã một số điều. 671 00:41:22,150 --> 00:41:29,770 >> Vì vậy, vấn đề bây giờ là, tốt, ngay cả khi chúng ta có mã hóa mạnh 672 00:41:29,770 --> 00:41:34,830 thuật toán trên thế giới, nếu bạn chọn một mật khẩu đặc biệt là người nghèo, sau đó nó 673 00:41:34,830 --> 00:41:37,720 sẽ không giúp đỡ bạn rất nhiều, kể từ khi người vẫn sẽ có thể con số nó ra. 674 00:41:37,720 --> 00:41:41,530 Ngay cả khi nhìn thấy những chuỗi mã hóa và nó trông giống như một mớ hỗn độn rác 675 00:41:41,530 --> 00:41:44,760 điều đó có nghĩa gì với họ, nếu họ vẫn chỉ cần thử một vài mật khẩu 676 00:41:44,760 --> 00:41:50,560 để con nó ra, sau đó bạn không phải là rất an toàn. 677 00:41:50,560 --> 00:41:55,890 Vì vậy, xem một đoạn video mà làm cho điểm đó. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO XEM LẠI] 680 00:42:00,970 --> 00:42:02,100 >> -Mũ bảo hiểm, bạn Fiend. 681 00:42:02,100 --> 00:42:03,370 Những gì đang xảy ra? 682 00:42:03,370 --> 00:42:05,170 Bạn đang làm gì để con gái tôi? 683 00:42:05,170 --> 00:42:09,910 >> -Cho phép tôi giới thiệu rực rỡ bác sĩ phẫu thuật trẻ, Tiến sĩ Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, mũi lớn nhất người đàn ông công việc trong toàn bộ 685 00:42:13,730 --> 00:42:16,080 vũ trụ, và Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Hoàng thân của bạn. 687 00:42:17,210 --> 00:42:18,070 >> Mũi công việc? 688 00:42:18,070 --> 00:42:18,670 Tôi không hiểu. 689 00:42:18,670 --> 00:42:20,090 Cô ấy đã có một công việc mũi. 690 00:42:20,090 --> 00:42:21,910 Đó là một mười sáu ngọt ngào hiện tại. 691 00:42:21,910 --> 00:42:22,140 >> -Không có. 692 00:42:22,140 --> 00:42:23,690 Nó không phải những gì bạn nghĩ. 693 00:42:23,690 --> 00:42:25,420 Nó nhiều, tồi tệ hơn nhiều. 694 00:42:25,420 --> 00:42:30,300 Nếu bạn không cho tôi kết hợp để lá chắn không khí, Tiến sĩ Schlotkin sẽ 695 00:42:30,300 --> 00:42:34,226 cho con gái của bạn trở lại mũi cũ của mình. 696 00:42:34,226 --> 00:42:35,476 >> -Không có. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Nơi mà bạn đã có được điều đó không? 699 00:42:40,516 --> 00:42:41,440 >> -Được rồi. 700 00:42:41,440 --> 00:42:42,180 Tôi sẽ nói cho. 701 00:42:42,180 --> 00:42:43,381 Tôi sẽ nói cho. 702 00:42:43,381 --> 00:42:44,263 Không, cha. 703 00:42:44,263 --> 00:42:45,590 Không, bạn phải không. 704 00:42:45,590 --> 00:42:46,860 >> -Anh phải, thân yêu của tôi. 705 00:42:46,860 --> 00:42:48,450 Tôi sẽ bỏ lỡ mũi mới của bạn. 706 00:42:48,450 --> 00:42:52,090 Nhưng tôi sẽ không nói cho anh ta sự kết hợp, không có vấn đề gì. 707 00:42:52,090 --> 00:42:53,680 >> -Rất tốt. 708 00:42:53,680 --> 00:42:55,685 Tiến sĩ Schlotkin, làm tồi tệ nhất của bạn. 709 00:42:55,685 --> 00:42:56,914 >> -Tôi niềm vui. 710 00:42:56,914 --> 00:43:00,690 >> [CÔNG CỤ ĐƯỢC mài] 711 00:43:00,690 --> 00:43:01,910 >> -Không có. 712 00:43:01,910 --> 00:43:02,520 Chờ đợi. 713 00:43:02,520 --> 00:43:03,836 Chờ đợi. 714 00:43:03,836 --> 00:43:05,300 Tôi sẽ nói cho. 715 00:43:05,300 --> 00:43:06,880 Tôi sẽ nói cho. 716 00:43:06,880 --> 00:43:09,130 >> -Tôi biết nó sẽ làm việc. 717 00:43:09,130 --> 00:43:09,900 Được rồi. 718 00:43:09,900 --> 00:43:12,850 Đưa nó cho tôi. 719 00:43:12,850 --> 00:43:16,918 >> -Sự kết hợp là một. 720 00:43:16,918 --> 00:43:17,406 >> -Một. 721 00:43:17,406 --> 00:43:18,382 >> -Một. 722 00:43:18,382 --> 00:43:19,358 >> -Hai. 723 00:43:19,358 --> 00:43:19,846 >> -Hai. 724 00:43:19,846 --> 00:43:20,822 >> -Hai. 725 00:43:20,822 --> 00:43:21,310 >> -Ba. 726 00:43:21,310 --> 00:43:21,798 >> -Ba. 727 00:43:21,798 --> 00:43:22,774 >> -Ba. 728 00:43:22,774 --> 00:43:23,262 >> -Bốn. 729 00:43:23,262 --> 00:43:23,750 >> -Bốn. 730 00:43:23,750 --> 00:43:26,150 >> -Bốn. 731 00:43:26,150 --> 00:43:27,010 >> -Five. 732 00:43:27,010 --> 00:43:27,670 >> -Five. 733 00:43:27,670 --> 00:43:29,010 >> -Five. 734 00:43:29,010 --> 00:43:34,770 >> -Vì vậy, sự kết hợp là một trong những, hai, ba, bốn, năm. 735 00:43:34,770 --> 00:43:37,460 Đó là sự kết hợp ngu ngốc Tôi từng được nghe trong cuộc sống của tôi. 736 00:43:37,460 --> 00:43:39,710 Đó là loại điều một thằng ngốc sẽ có trên hành lý của mình. 737 00:43:39,710 --> 00:43:42,000 >> -Cảm ơn bạn, Hoàng thân của bạn. 738 00:43:42,000 --> 00:43:43,530 >> -Bạn đã làm gì? 739 00:43:43,530 --> 00:43:44,490 >> -Tôi tắt tường. 740 00:43:44,490 --> 00:43:45,420 >> -Không có bạn thì không. 741 00:43:45,420 --> 00:43:45,840 Bạn tắt toàn bộ phim. 742 00:43:45,840 --> 00:43:46,930 >> -Tôi phải nhấn nút sai. 743 00:43:46,930 --> 00:43:48,265 >> -Vâng, đặt nó trở lại. 744 00:43:48,265 --> 00:43:49,110 Đưa bộ phim trở lại. 745 00:43:49,110 --> 00:43:49,510 >> -Vâng, thưa ngài. 746 00:43:49,510 --> 00:43:49,917 Vâng, thưa ngài. 747 00:43:49,917 --> 00:43:50,324 >> -Đi thôi, Arnold. 748 00:43:50,324 --> 00:43:51,140 Đến, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Tất nhiên, bạn biết tôi vẫn sẽ thấy phải hoá đơn cho bạn cho việc này. 750 00:43:53,060 --> 00:43:53,440 >> [END phát lại video] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: Được rồi. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Vì vậy, bây giờ chúng ta đang nói về đã an ninh trong một số cách, đẹp 754 00:44:08,430 --> 00:44:16,050 ít poster phim, do đó gần đây ngày, những vấn đề này với NSA 755 00:44:16,050 --> 00:44:17,300 giám sát tất cả mọi thứ. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Nó có thể được khó khăn để cảm thấy như bạn có một số loại bảo mật trong 758 00:44:26,930 --> 00:44:34,540 thế giới trực tuyến, mặc dù tôi không thể nói bạn hầu hết các chi tiết của PRISM. 759 00:44:34,540 --> 00:44:42,130 Vì vậy, đi xa hơn PRISM, chúng tôi sẽ không được nói về điều đó, bây giờ 760 00:44:42,130 --> 00:44:44,030 suy nghĩ về máy tính xách tay của bạn. 761 00:44:44,030 --> 00:44:48,360 Vì vậy, ở đây, tôi muốn chuyển đổi vào tài khoản thực tế của tôi, 762 00:44:48,360 --> 00:44:50,370 với chim cánh cụt nhỏ của tôi. 763 00:44:50,370 --> 00:44:57,310 Vì vậy, tôi có một bộ mật khẩu, và mật khẩu là bất cứ điều gì tôi muốn nó được. 764 00:44:57,310 --> 00:45:02,430 >> Nhưng hãy nhớ rằng những gì tôi đang đăng nhập với, do đó đăng nhập này 765 00:45:02,430 --> 00:45:04,850 nhanh chóng, một số chương trình. 766 00:45:04,850 --> 00:45:07,910 Đó là một số chương trình đó là được viết bởi một số người. 767 00:45:07,910 --> 00:45:13,250 Và như vậy, người đó, nếu họ đặc biệt độc hại, họ có thể 768 00:45:13,250 --> 00:45:17,780 đã nói, tất cả các bên phải, do đó, nếu mật khẩu mà tôi nhập bằng của tôi 769 00:45:17,780 --> 00:45:22,800 mật khẩu thực tế, hoặc nó bằng một số mật khẩu đặc biệt - 770 00:45:22,800 --> 00:45:25,550 David là tuyệt vời hoặc một cái gì đó - 771 00:45:25,550 --> 00:45:27,190 sau đó cho họ vào 772 00:45:27,190 --> 00:45:33,760 Vì vậy, một lập trình độc hại có thể có truy cập vào tất cả các máy Mac của bạn, hoặc 773 00:45:33,760 --> 00:45:36,150 Cửa sổ, hoặc bất cứ điều gì. 774 00:45:36,150 --> 00:45:41,980 >> Vì vậy, đó không phải là nhiều quan tâm, kể từ khi, Ý tôi là, đây là chương trình đăng nhập 775 00:45:41,980 --> 00:45:48,720 đó là vận chuyển với OS X, hàng trăm hoặc hàng ngàn người có 776 00:45:48,720 --> 00:45:50,020 xem xét mã này. 777 00:45:50,020 --> 00:45:55,330 Và như vậy, nếu, trong mã của bạn một nơi nào đó, bạn nói rằng nếu chuỗi này bằng bình đẳng 778 00:45:55,330 --> 00:45:58,860 David là tuyệt vời, đăng nhập, sau đó một ai đó có được, như thế, chờ đợi. 779 00:45:58,860 --> 00:45:59,800 Điều này không đúng. 780 00:45:59,800 --> 00:46:01,790 Điều này không nên ở đây. 781 00:46:01,790 --> 00:46:06,650 Vì vậy, đó là một cách mà chúng ta có được những thứ là loại an toàn. 782 00:46:06,650 --> 00:46:10,300 >> Nhưng suy nghĩ về chương trình thậm chí mà bạn viết. 783 00:46:10,300 --> 00:46:13,000 Hãy nói rằng bạn đã viết chương trình đăng nhập. 784 00:46:13,000 --> 00:46:20,440 Vì vậy, chương trình này đăng nhập mà bạn đã viết, vì vậy rõ ràng, bạn là một tốt 785 00:46:20,440 --> 00:46:21,210 lập trình viên. 786 00:46:21,210 --> 00:46:25,610 Bạn sẽ không đặt bất kỳ độc hại nếu x bằng bằng David là tuyệt vời 787 00:46:25,610 --> 00:46:27,860 vào mã của bạn. 788 00:46:27,860 --> 00:46:31,930 Nhưng chương trình này, những gì bạn sử dụng để biên dịch chương trình này? 789 00:46:31,930 --> 00:46:34,180 Một cái gì đó như Clang. 790 00:46:34,180 --> 00:46:38,460 Vì vậy, những gì nếu người xảy ra viết hoa chữ cái đầu Clang đặc biệt trong Clang 791 00:46:38,460 --> 00:46:44,310 một cái gì đó như, nếu tôi biên dịch chương trình đăng nhập, sau đó nhập mã này 792 00:46:44,310 --> 00:46:49,720 vào chương trình đăng nhập mà nói, nếu x bằng bằng David là tuyệt vời? 793 00:46:49,720 --> 00:46:59,890 Vì vậy, không hoàn toàn, nhưng chúng tôi có cùng một phát hành ở đây, nơi Clang, tốt, 794 00:46:59,890 --> 00:47:03,790 hàng ngàn, nếu không phải hàng chục ngàn người, đã nhìn Clang, có 795 00:47:03,790 --> 00:47:07,160 nhìn dòng của mã và nói: tất cả các bên phải, không có gì xấu ở đây là. 796 00:47:07,160 --> 00:47:10,680 Rõ ràng, không ai được làm bất cứ điều gì độc hại này. 797 00:47:10,680 --> 00:47:15,780 >> Nhưng những gì đang kêu vang chính nó, như, những gì nếu tôi biên dịch kêu vang? 798 00:47:15,780 --> 00:47:20,900 Nếu tôi có một số trình biên dịch biên dịch Clang chèn vào Clang 799 00:47:20,900 --> 00:47:25,610 hack này đặc biệt nói rằng, tất cả các bên phải, khi tôi biên dịch kêu vang, sau đó các 800 00:47:25,610 --> 00:47:31,290 thực thi tôi nhận được đặc biệt nên xem xét bên trong của chương trình đăng nhập và chèn 801 00:47:31,290 --> 00:47:34,230 mật khẩu này, bằng bình đẳng Dave là tuyệt vời? 802 00:47:34,230 --> 00:47:37,990 Vì vậy, hãy nhớ rằng trình biên dịch của bạn chính nó cần phải được biên dịch tại một số điểm. 803 00:47:37,990 --> 00:47:42,810 Vì vậy, nếu những gì bạn chọn để biên dịch Clang với, chính nó là độc hại, sau đó bạn 804 00:47:42,810 --> 00:47:45,580 có thể được vặn toàn bộ cách xuống dòng. 805 00:47:45,580 --> 00:47:49,630 >> Vì vậy, ở đây, chúng tôi có Ken Thompson và Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Vì vậy, đây là một hình ảnh mang tính biểu tượng. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie là bên phải. 808 00:47:55,470 --> 00:47:58,740 Ông là một chính - 809 00:47:58,740 --> 00:48:03,640 khá nhiều viết C. Vì vậy, bạn có thể cảm ơn anh cho các lớp học này. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson là bên trái. 811 00:48:04,840 --> 00:48:07,780 Hai người về cơ bản đã viết UNIX. 812 00:48:07,780 --> 00:48:10,140 Vâng, họ đã đóng góp lớn UNIX. 813 00:48:10,140 --> 00:48:11,310 Đã có một số người khác. 814 00:48:11,310 --> 00:48:16,240 Vì vậy, Ken Thompson, tại một số điểm, anh thắng giải thưởng Turing. 815 00:48:16,240 --> 00:48:20,860 Và giải thưởng Turing, tôi đã luôn luôn nghe nó tham chiếu theo cách này, đó là 816 00:48:20,860 --> 00:48:23,100 Giải Nobel khoa học máy tính. 817 00:48:23,100 --> 00:48:27,500 >> Vì vậy, tại giải thưởng Turing, ông đã bài diễn văn của mình. 818 00:48:27,500 --> 00:48:31,790 Và ông cho bài phát biểu rất nổi tiếng này bây giờ, được gọi là phản ánh về Đáng tin cậy 819 00:48:31,790 --> 00:48:35,620 Tin tưởng, mà chúng tôi đã liên kết Để vào trang web khóa học. 820 00:48:35,620 --> 00:48:41,670 Và trong bài phát biểu này, ông nói, tất cả các bên phải, vì vậy tôi đã viết UNIX, và bây giờ tất cả 821 00:48:41,670 --> 00:48:43,320 bạn người đang sử dụng UNIX. 822 00:48:43,320 --> 00:48:46,960 Bây giờ, hãy nhớ ngày hôm nay rằng Linux là một hậu duệ trực tiếp của UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X trực tiếp sử dụng UNIX. 824 00:48:50,140 --> 00:48:53,810 Cửa sổ không quá nhiều, nhưng rất nhiều các ý tưởng được lấy từ UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Vì vậy, ông đi lên sân khấu và nói: tất cả các bên phải, tôi đã viết UNIX. 826 00:48:59,220 --> 00:49:03,940 Và chỉ để các bạn biết, tôi thể đăng nhập vào tất cả các 827 00:49:03,940 --> 00:49:05,590 một duy nhất của máy tính của bạn. 828 00:49:05,590 --> 00:49:14,280 Kể từ khi tôi đặt một trong những đặc biệt nếu x bằng bằng Ken Thomson là tuyệt vời, 829 00:49:14,280 --> 00:49:16,350 sau đó tôi được phép đăng nhập. 830 00:49:16,350 --> 00:49:18,370 Để mọi người là như thế, tốt, sao cô làm điều đó? 831 00:49:18,370 --> 00:49:21,090 Chúng ta nhìn vào chương trình đăng nhập và không có gì ở đó. 832 00:49:21,090 --> 00:49:24,700 Anh ấy như, tốt, tôi sửa đổi các trình biên dịch để đăng nhập vào chương trình đăng nhập 833 00:49:24,700 --> 00:49:30,490 để chương trình đăng nhập sẽ có mà x bằng bằng Ken Thompson 834 00:49:30,490 --> 00:49:31,700 là tuyệt vời. 835 00:49:31,700 --> 00:49:33,120 >> Và họ nói, tốt, đó là không đúng sự thật. 836 00:49:33,120 --> 00:49:35,740 Chúng tôi đang tìm kiếm các trình biên dịch, và trình biên dịch không có bất kỳ dòng 837 00:49:35,740 --> 00:49:36,400 mã như thế đó. 838 00:49:36,400 --> 00:49:40,540 Anh ấy là như thế, OK, nhưng bạn là gì biên soạn các trình biên dịch với? 839 00:49:40,540 --> 00:49:44,810 Và họ nghĩ, và anh ấy, như, tốt, Tôi là một trong những người đã cho bạn trình biên dịch 840 00:49:44,810 --> 00:49:50,580 bạn đang sử dụng để biên dịch các trình biên dịch, vì vậy bạn đang biên soạn một trình biên dịch, mà 841 00:49:50,580 --> 00:49:56,390 chính nó là độc hại, và sẽ phá vỡ chương trình đăng nhập. 842 00:49:56,390 --> 00:49:59,360 Vì vậy, về cơ bản, vào thời điểm đó, có không có cách nào bạn có thể nhìn vào mã nguồn 843 00:49:59,360 --> 00:50:02,450 mã số của chương trình đăng nhập để xem những gì là sai trái. 844 00:50:02,450 --> 00:50:04,220 Bạn thậm chí không thể nhìn vào mã nguồn của trình biên dịch 845 00:50:04,220 --> 00:50:06,790 để xem những gì là sai trái. 846 00:50:06,790 --> 00:50:11,940 >> Bạn sẽ cần phải nhìn vào máy mã, nhị phân thực tế của 847 00:50:11,940 --> 00:50:16,760 trình biên dịch biên soạn để xem, chờ đợi, những dòng mã không nên ở đây. 848 00:50:16,760 --> 00:50:22,130 Nhưng Ken Thompson lấy nó một bước hơn nữa và nói tốt, có 849 00:50:22,130 --> 00:50:25,980 các chương trình đặc biệt mà thực sự giúp bạn đọc nhị phân của chương trình, 850 00:50:25,980 --> 00:50:29,340 và do đó, nếu một người nào đó sử dụng chương trình để đọc nhị phân, họ sẽ thấy những 851 00:50:29,340 --> 00:50:30,490 dòng mã. 852 00:50:30,490 --> 00:50:34,020 Ông đã điều chỉnh các chương trình để nói, tất cả bên phải, nếu bạn đang tìm kiếm các 853 00:50:34,020 --> 00:50:38,460 trình biên dịch, không hiển thị đặc biệt này bộ nhị phân. 854 00:50:38,460 --> 00:50:42,830 >> Vì vậy, sau đó bạn cần phải có một bước hơn nữa và về cơ bản, có thể có 855 00:50:42,830 --> 00:50:46,210 thực hiện nhiều mức độ về mình, và tại một số điểm, không ai thực sự 856 00:50:46,210 --> 00:50:47,990 sẽ được kiểm tra. 857 00:50:47,990 --> 00:50:52,590 Vì vậy, đạo đức của câu chuyện là, bạn sẽ không được viết 858 00:50:52,590 --> 00:50:54,340 Kêu vang trong lớp học này. 859 00:50:54,340 --> 00:50:57,020 Bạn sẽ được sử dụng leo núi Kêu vang rất nhiều trong lớp học này. 860 00:50:57,020 --> 00:51:00,490 Cho tất cả các bạn đã biết, kêu vang là một độc hại chương trình được phá hoại tất cả 861 00:51:00,490 --> 00:51:03,520 chương trình duy nhất bạn đã từng biên dịch. 862 00:51:03,520 --> 00:51:08,206 Và để lại cho bạn về điều đó rất đáng ngại lưu ý, xem bạn vào ngày thứ Tư. 863 00:51:08,206 --> 00:51:10,030 >> [Vỗ tay] 864 00:51:10,030 --> 00:51:12,935 >> SPEAKER 2: Tại CS50 tiếp theo. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Anh không dám nói rằng. 866 00:51:14,580 --> 00:51:15,930 Bạn có thể làm điều này. 867 00:51:15,930 --> 00:51:19,440 Bạn đã làm điều này trước khi, bạn có thể làm điều này hôm nay, bạn có thể làm điều này vào ngày mai. 868 00:51:19,440 --> 00:51:20,930 Bạn đã làm điều này trong nhiều năm. 869 00:51:20,930 --> 00:51:22,790 Chỉ cần đi lên đó và làm điều này. 870 00:51:22,790 --> 00:51:24,310 Bạn có thể làm điều này. 871 00:51:24,310 --> 00:51:26,102 >> [MUSIC CHƠI]