1 00:00:00,000 --> 00:00:02,480 >> [MUSIC CHƠI] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG LLOYD: Được rồi, vậy chúng ta hãy nói về các đối số dòng lệnh. 4 00:00:09,350 --> 00:00:11,800 Vì vậy, cho đến nay trong khóa học khá nhiều tất cả các chương trình của bạn 5 00:00:11,800 --> 00:00:16,360 đã có thể bắt đầu như this-- int void main. 6 00:00:16,360 --> 00:00:18,310 Chúng tôi đã thu thập người dùng nhập vào, nếu chúng ta cần nó 7 00:00:18,310 --> 00:00:21,080 trong các chương trình của chúng tôi, chẳng hạn như Chương trình Mario, ví dụ, 8 00:00:21,080 --> 00:00:22,990 bởi trong chương trình nhắc nhở. 9 00:00:22,990 --> 00:00:25,190 Chúng tôi không cần thiết phải sửa đổi việc kê khai của chính, 10 00:00:25,190 --> 00:00:30,684 bởi vì thay vì bên trong của chúng tôi chủ yếu chỉ nói, bạn có thể gọi nó là để có được int. 11 00:00:30,684 --> 00:00:32,350 Làm thế nào để bạn muốn lớn các kim tự tháp được? 12 00:00:32,350 --> 00:00:34,455 Hoặc bạn có thể gọi nó là để có được float-- bao nhiêu thay đổi 13 00:00:34,455 --> 00:00:36,400 tôi nên đầu ra cho người sử dụng? 14 00:00:36,400 --> 00:00:38,630 >> Có một cách khác mặc dù, và nếu chúng ta muốn người dùng của chúng tôi 15 00:00:38,630 --> 00:00:40,580 để có thể cung cấp dữ liệu vào chương trình của chúng tôi 16 00:00:40,580 --> 00:00:43,320 trong thời gian chạy thay vì trong khi các chương trình đang chạy, 17 00:00:43,320 --> 00:00:45,910 khác biệt tế nhị nhưng đôi khi một trong rất hữu ích, 18 00:00:45,910 --> 00:00:48,120 chúng ta cần một hình thức mới của tuyên bố chính. 19 00:00:48,120 --> 00:00:53,320 Chúng tôi không thể sử dụng int void main nếu chúng ta muốn thu thập dữ liệu khác tại các dòng lệnh 20 00:00:53,320 --> 00:00:57,540 khi người dùng chạy các chương trình, do đó đối số dòng lệnh. 21 00:00:57,540 --> 00:00:59,810 >> Để thu thập được những dòng lệnh lập luận từ người sử dụng, 22 00:00:59,810 --> 00:01:03,140 thay đổi khai báo của bạn chính để trông giống như this-- int 23 00:01:03,140 --> 00:01:10,450 chính, dấu ngoặc mở, int argc, dấu phẩy, chuỗi argv, dấu ngoặc vuông, 24 00:01:10,450 --> 00:01:12,670 và sau đó mở ngoặc móc. 25 00:01:12,670 --> 00:01:14,415 Vì vậy, có nghĩa là gì chưa? 26 00:01:14,415 --> 00:01:19,410 Vâng, chúng tôi đang đi qua trong hai tham số, hay tranh luận, hoặc đầu vào chính. 27 00:01:19,410 --> 00:01:23,800 Một, một số nguyên được gọi là argc, và khác là gì? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 Đây là một mảng các chuỗi, phải không? 30 00:01:29,640 --> 00:01:31,140 Chúng tôi thấy rằng ký hiệu khung vuông. 31 00:01:31,140 --> 00:01:32,181 Đây là một mảng của chuỗi. 32 00:01:32,181 --> 00:01:35,110 Nó không phải là một chuỗi cá nhân, nó là một mảng của chuỗi. 33 00:01:35,110 --> 00:01:39,640 Và hai đối số, argc và argv, cho phép bạn biết những gì dữ liệu người dùng 34 00:01:39,640 --> 00:01:42,912 đã được cung cấp tại các dòng lệnh và bao nhiêu những điều họ 35 00:01:42,912 --> 00:01:44,120 cung cấp tại các dòng lệnh. 36 00:01:44,120 --> 00:01:46,570 Điều khá hữu ích để làm việc với. 37 00:01:46,570 --> 00:01:50,310 >> Argc là viết tắt của số đối số, và bạn nên biết, bằng cách này, 38 00:01:50,310 --> 00:01:52,600 mà bạn có thể gọi argc bất cứ điều gì bạn muốn nó. 39 00:01:52,600 --> 00:01:54,710 Bạn có thể gọi argv bất cứ điều gì bạn muốn. 40 00:01:54,710 --> 00:01:58,740 Đây là những tên chỉ thông thường mà chúng tôi sử dụng cho them-- số lập luận, 41 00:01:58,740 --> 00:02:00,907 và như chúng ta sẽ thấy trong một giây, vector tham số, argv. 42 00:02:00,907 --> 00:02:03,698 Nhưng bạn không cần phải gọi cho họ argc và argv nếu bạn không muốn, 43 00:02:03,698 --> 00:02:05,570 nhưng thông thường, đó là những gì chúng tôi làm. 44 00:02:05,570 --> 00:02:07,500 >> Vì vậy, dù sao, argc, số lượng đối số. 45 00:02:07,500 --> 00:02:11,569 Đây là một biến số nguyên và kiểu như vậy, như bạn có thể mong đợi, nếu chúng ta có hai điều 46 00:02:11,569 --> 00:02:13,860 rằng chúng ta sẽ được tìm kiếm khám phá những gì được đánh máy 47 00:02:13,860 --> 00:02:16,070 và bao nhiêu thứ mà các người dùng đánh máy, argc là 48 00:02:16,070 --> 00:02:18,559 sẽ cho chúng tôi biết bao nhiêu nhét người dùng gõ. 49 00:02:18,559 --> 00:02:20,850 Vì vậy, nó sẽ cho bạn một số đối số dòng lệnh sử dụng 50 00:02:20,850 --> 00:02:22,470 đánh máy khi chương trình được thực thi. 51 00:02:22,470 --> 00:02:25,780 Vì vậy, nếu chương trình của bạn chạy dot giảm tham lam, 52 00:02:25,780 --> 00:02:28,670 và bên trong của tham lam của bạn chương trình chức năng chính của bạn 53 00:02:28,670 --> 00:02:34,800 có khai báo int int argc chính, chuỗi argv dấu ngoặc vuông, sau đó 54 00:02:34,800 --> 00:02:37,950 argc trong trường hợp đó là một. 55 00:02:37,950 --> 00:02:40,200 Bây giờ chúng tôi nhận thấy không đếm có bao nhiêu thứ 56 00:02:40,200 --> 00:02:42,590 người sử dụng gõ vào sau tên chương trình. 57 00:02:42,590 --> 00:02:46,710 Tên chương trình chính nó đếm như là một đối số dòng lệnh. 58 00:02:46,710 --> 00:02:51,770 >> Vì vậy, rải rác giảm tham lam, trong trường hợp đó, argc là một. 59 00:02:51,770 --> 00:02:57,910 Nếu người sử dụng gõ dấu gạch chéo tham lam 1024 CS50 tại dòng lệnh, argc trong trường hợp đó 60 00:02:57,910 --> 00:02:59,520 sẽ là ba. 61 00:02:59,520 --> 00:03:03,720 Và chúng ta biết điều này vì đường rằng sự phân chia giữa các dây 62 00:03:03,720 --> 00:03:06,030 được phát hiện là liệu có một không gian, hoặc một tab, 63 00:03:06,030 --> 00:03:08,230 hoặc một cái gì đó như thế giữa chúng. 64 00:03:08,230 --> 00:03:13,860 Vì vậy, bất kỳ khoảng không gian màu trắng, cái gọi là, giữa các giá trị gõ dòng lệnh 65 00:03:13,860 --> 00:03:15,720 chỉ ra có bao nhiêu. 66 00:03:15,720 --> 00:03:24,040 Vì vậy, rải rác giảm không gian tham lam 1024 không gian CS50, argc, trong trường hợp đó, là ba. 67 00:03:24,040 --> 00:03:26,600 >> Argv là các vector tham số. 68 00:03:26,600 --> 00:03:29,240 Vector, bằng cách này, chỉ là một từ khác cho một mảng, 69 00:03:29,240 --> 00:03:31,510 và điều này là một mảng mà các cửa hàng chuỗi. 70 00:03:31,510 --> 00:03:35,540 Một chuỗi mỗi yếu tố, mà là các dây mà người dùng thực sự 71 00:03:35,540 --> 00:03:39,230 gõ vào dòng lệnh khi chương trình được thực thi. 72 00:03:39,230 --> 00:03:40,990 Bây giờ, như là trường hợp với mảng bất kỳ, nếu bạn 73 00:03:40,990 --> 00:03:44,380 nhớ lại từ cuộc thảo luận của chúng ta về mảng, phần tử đầu tiên của argv 74 00:03:44,380 --> 00:03:49,150 là luôn luôn có thể được tìm thấy tại argv khung vuông zero. 75 00:03:49,150 --> 00:03:51,800 Đó là chỉ số đầu tiên của mảng argv. 76 00:03:51,800 --> 00:03:55,720 Vì vậy mà will-- và trong thực tế, điều đó sẽ luôn luôn là tên của chương trình, 77 00:03:55,720 --> 00:03:59,730 sẽ luôn luôn được đặt tại argv khung vuông zero. 78 00:03:59,730 --> 00:04:08,590 >> Yếu tố cuối cùng của argv là luôn luôn tìm thấy tại argv dấu ngoặc vuông argc trừ đi một. 79 00:04:08,590 --> 00:04:10,300 Bạn có thấy lý do tại sao? 80 00:04:10,300 --> 00:04:14,180 Ghi bao nhiêu yếu tố tồn tại trong mảng này. 81 00:04:14,180 --> 00:04:16,660 Vâng, chúng tôi biết that-- nó số argc của các yếu tố. 82 00:04:16,660 --> 00:04:21,279 Nếu người dùng gõ ba thứ cùng các dòng lệnh, argc là ba. 83 00:04:21,279 --> 00:04:27,070 Nhưng bởi vì trong c, khi chúng tôi đang làm việc với mảng, mỗi phần tử của mảng, 84 00:04:27,070 --> 00:04:30,190 hay đúng hơn là chỉ số của mảng, bắt đầu từ số không. 85 00:04:30,190 --> 00:04:34,000 Nếu chúng tôi có ba yếu tố trong của chúng tôi mảng, chúng tôi có một phần tử ở argv zero, 86 00:04:34,000 --> 00:04:37,930 một phần tử ở argv một, và một phần tử ở argv hai. 87 00:04:37,930 --> 00:04:41,700 Không có yếu tố tại argv ba, và một mảng có kích thước ba. 88 00:04:41,700 --> 00:04:43,990 Vì vậy, đó là lý do tại sao cuối cùng yếu tố của argv có thể luôn luôn 89 00:04:43,990 --> 00:04:49,510 được tìm thấy tại argv vuông ngoặc argc trừ đi một. 90 00:04:49,510 --> 00:04:52,420 >> Vì vậy, chúng ta thừa nhận thực người dùng chương trình tham lam như follows-- 91 00:04:52,420 --> 00:04:57,970 nếu họ gõ vào dòng lệnh dot giảm tham lam không gian 1024 không gian CS50, 92 00:04:57,970 --> 00:05:00,720 và vì lý do gì chúng tôi đã đã chuẩn bị chương trình tham lam của chúng tôi 93 00:05:00,720 --> 00:05:04,050 để biết và làm việc với các đối số dòng lệnh. 94 00:05:04,050 --> 00:05:07,030 Chúng tôi đã làm trước đây không khi chúng tôi làm việc trên đó cho các vấn đề tham lam, 95 00:05:07,030 --> 00:05:09,660 nhưng chúng ta hãy nói bây giờ chúng ta đã sửa đổi nó để chúng ta làm quá trình 96 00:05:09,660 --> 00:05:11,480 các đối số dòng lệnh trong một số cách. 97 00:05:11,480 --> 00:05:15,720 Trong trường hợp này, argv zero là dấu chấm dấu gạch chéo tham lam. 98 00:05:15,720 --> 00:05:17,042 Argv một là gì? 99 00:05:17,042 --> 00:05:19,030 Vâng, đó là năm 1024, phải không? 100 00:05:19,030 --> 00:05:22,620 Đó là năm 1024, nhưng đây là một distinction-- thực sự quan trọng 101 00:05:22,620 --> 00:05:26,410 bạn có nhớ các kiểu dữ liệu của argv? 102 00:05:26,410 --> 00:05:31,020 >> Nó lưu trữ các chuỗi, phải không? 103 00:05:31,020 --> 00:05:34,140 Nhưng có vẻ như năm 1024 là một số nguyên. 104 00:05:34,140 --> 00:05:36,530 Đây là một thực sự quan trọng phân biệt, và thực sự là 105 00:05:36,530 --> 00:05:40,200 sẽ trở thành một cái gì đó mà bạn có thể gặp phải trong vấn đề sau này. 106 00:05:40,200 --> 00:05:43,770 Tất cả mọi thứ trong argv là được lưu trữ như là một chuỗi. 107 00:05:43,770 --> 00:05:48,775 Vì vậy, nội dung của một argv là một chuỗi, bằng không, hai, bốn, 108 00:05:48,775 --> 00:05:50,275 gồm bốn ký tự. 109 00:05:50,275 --> 00:05:53,870 Đó là nếu người dùng gõ một, không, hai, bốn 110 00:05:53,870 --> 00:05:56,680 như các chữ cái hoặc ký tự. 111 00:05:56,680 --> 00:06:00,730 Nó không phải là số nguyên 1024, và do đó bạn có thể không trực tiếp 112 00:06:00,730 --> 00:06:11,580 làm việc với nó bằng cách nói int 1000, hoặc thay vì int x bằng argv một trừ đi 24. 113 00:06:11,580 --> 00:06:15,550 >> Bằng trực giác, bạn có thể nghĩ rằng như, OK, cũng đó là 1024 trừ đi 24, 114 00:06:15,550 --> 00:06:17,920 nên x bằng 1.000. 115 00:06:17,920 --> 00:06:22,020 Nhưng trên thực tế, đó không phải là trường hợp, vì argv một là một chuỗi. 116 00:06:22,020 --> 00:06:23,940 Chuỗi 1024. 117 00:06:23,940 --> 00:06:28,739 Bây giờ có một chức năng mà có thể được được sử dụng để chuyển đổi các chuỗi số nguyên. 118 00:06:28,739 --> 00:06:30,780 Tôi sẽ không làm hỏng nó cho bạn bây giờ, nhưng tôi chắc chắn Zamyla 119 00:06:30,780 --> 00:06:34,380 sẽ được hạnh phúc để cho bạn biết về nó trong các hương cho một vấn đề trong tương lai. 120 00:06:34,380 --> 00:06:36,390 Nhưng bạn cũng có thể tìm thấy vấn đề like-- cớ 121 00:06:36,390 --> 00:06:39,921 tôi, chức năng mà có làm điều này trong tài liệu tham khảo 50, 122 00:06:39,921 --> 00:06:42,462 nếu bạn đi đến hướng dẫn tham khảo bạn có thể tìm thấy một chức năng mà 123 00:06:42,462 --> 00:06:43,820 sẽ thực hiện chuyển đổi này cho bạn. 124 00:06:43,820 --> 00:06:45,980 Nhưng một lần nữa, trong hướng cho một vấn đề trong tương lai, 125 00:06:45,980 --> 00:06:48,290 Zamyla sẽ được hạnh phúc để cho bạn biết những gì chức năng 126 00:06:48,290 --> 00:06:53,280 nó là sẽ chuyển đổi chuỗi 1024 đến các số nguyên 1024. 127 00:06:53,280 --> 00:06:54,560 >> Được rồi, để di chuyển trên. 128 00:06:54,560 --> 00:06:56,726 Chúng tôi đã được bảo hiểm không argv của chúng tôi, chúng ta đã thảo argv một. 129 00:06:56,726 --> 00:06:58,000 Có gì trong argv hai? 130 00:06:58,000 --> 00:06:58,620 CS50. 131 00:06:58,620 --> 00:07:01,350 Đó có thể là một khá tự giải thích. 132 00:07:01,350 --> 00:07:02,950 Có gì trong argv ba? 133 00:07:02,950 --> 00:07:04,970 Vâng một lần nữa, chúng tôi thực sự không biết, phải không? 134 00:07:04,970 --> 00:07:08,060 Chúng tôi có một mảng có kích thước ba, đó là bao nhiêu yếu tố người sử dụng 135 00:07:08,060 --> 00:07:11,610 gõ vào dòng lệnh, vì vậy nếu chúng ta đi đến argv ba, 136 00:07:11,610 --> 00:07:14,660 chúng tôi hiện overstepping giới hạn của mảng của chúng tôi. 137 00:07:14,660 --> 00:07:18,570 Trình biên dịch sẽ cho phép chúng ta làm điều này, không có vấn đề trực quan với nó, 138 00:07:18,570 --> 00:07:22,890 nhưng về mặt thực tế những gì đang diễn ra xảy ra, chúng tôi thực sự không biết. 139 00:07:22,890 --> 00:07:25,380 Nó phụ thuộc vào những gì là nằm trong bộ nhớ nơi 140 00:07:25,380 --> 00:07:28,060 argv ba sẽ được dự kiến ​​sẽ được. 141 00:07:28,060 --> 00:07:30,716 Và vì vậy chúng tôi có thể kết thúc lấy đi số tiền phải đóng góp miễn phí. 142 00:07:30,716 --> 00:07:33,840 Nhiều khả năng hơn không, đặc biệt là khi bạn đang làm việc với argv như trái ngược 143 00:07:33,840 --> 00:07:35,548 để các mảng khác đó là trong chương trình của chúng tôi, 144 00:07:35,548 --> 00:07:38,660 có lẽ chúng ta sẽ phải chịu đựng một lỗi phân khúc. Vì vậy, một lần nữa, 145 00:07:38,660 --> 00:07:42,756 được bảo đảm không vượt qua giới hạn của mảng của bạn, đặc biệt là argv, 146 00:07:42,756 --> 00:07:47,170 cho mức độ cao của tầm quan trọng trong các chương trình của bạn. 147 00:07:47,170 --> 00:07:48,100 >> Tôi Doug Lloyd. 148 00:07:48,100 --> 00:07:50,170 Đây là CS50. 149 00:07:50,170 --> 00:07:51,457