Trong lớp cấu trúc dữ liệu mà tôi hiện đang dùng, chúng tôi đã được giao nhiệm vụ viết trình thu thập dữ liệu web bằng C++. Để cung cấp cho chúng tôi một khởi đầu, giáo sư đã cung cấp cho chúng tôi một chương trình để lấy nguồn từ một URL nhất định và một trình phân tích cú pháp HTML đơn giản để tách các thẻ ra. Chức năng chính của chương trình này chấp nhận các đối số và do đó sử dụng argc/argv. Các mã được sử dụng để kiểm tra cho các đối số như sau:Tại sao phải kiểm tra xem (* argv == NULL)?
// Process the arguments
if (!strcmp(option, "-h"))
{
// do stuff...
}
else if (!strcmp(option, ""))
{
// do stuff...
}
else if (!strcmp(option, "-t"))
{
// do stuff...
}
else if (!strcmp(option, "-a"))
{
// do stuff...
}
if (*argv == NULL)
{
exit(1);
}
đâu "tùy chọn" đã được dân cư với các switch trong argv [1], và argv [2] và cao hơn có các đối số còn lại. Khối đầu tiên tôi hiểu tốt, nếu chuyển đổi bằng chuỗi làm bất cứ điều gì dựa trên chuyển đổi. Tôi tự hỏi mục đích của khối cuối cùng là gì.
Nó có thể là C++ của tôi là hơi gỉ, nhưng tôi dường như nhớ lại * argv là tương đương với argv [0], về cơ bản có nghĩa là nó đang kiểm tra để đảm bảo các đối số tồn tại. Ngoại trừ tôi đã được ấn tượng rằng argv [0] luôn luôn (ít nhất là trong hầu hết các triển khai) chứa tên của chương trình đang chạy. Nó xảy ra với tôi rằng argv [0] có thể là null nếu argc bằng 0, nhưng tìm kiếm xung quanh trên Google tôi không thể tìm thấy một bài duy nhất xác định có hay không mà thậm chí có thể.
Và vì vậy tôi chuyển sang bạn. Chính xác thì cuối cùng nếu khối kiểm tra là gì?
EDIT: Tôi đã đi với lý do được cung cấp trong các nhận xét của câu trả lời đã chọn, có thể cố ý gây ra argv [0] để trở thành NULL, hoặc bằng cách khác trở thành NULL dựa trên nền tảng cụ thể thực hiện chính.
Lưu ý rằng 'argv' không phải là mảng mà là con trỏ. Điều đó có nghĩa là bạn hoàn toàn có thể nói 'argv ++' để lặp qua các tùy chọn. Bạn không phải sửa đổi giá trị của '* argv'. –
Trong sự tò mò, lý do được đưa ra bởi giáo sư của bạn khi bạn hỏi anh/cô ấy về nó là gì? – Daniel
Bây giờ, 5 năm sau, tôi sợ tôi thực sự không nhớ. Tôi dường như mơ hồ nhớ lại yêu cầu TA của tôi và lý do giống như trong các ý kiến của câu trả lời được chấp nhận (xem EDIT trong câu hỏi), nhưng tôi có thể làm điều đó và chỉ nhớ tất cả sai. : P –