2010-09-22 31 views
41

Giáo sư của tôi và một vài sinh viên đang tranh luận về việc liệu argv có bị chấm dứt hay không. Bạn tôi đã viết một chương trình nhỏ và nó in ra null nhưng một đứa trẻ khác nói rằng anh ấy có lẽ chỉ đơn giản là đọc vào bộ nhớ trống. Ai đó có thể giải quyết cuộc thảo luận này?argv [argc] ==?

Trả lời

76

Từ Tiêu chuẩn:

5.1.2.2.1 Chương trình khởi động
...
- argv [argc] sẽ là một con trỏ null.

Vì vậy, có; argv is null terminated

+6

Nó không rõ ràng hơn thế nữa;) – caf

+1

Chà, tôi không biết điều đó. Tại sao sau đó các argc anyway? –

+5

Tôi không biết ** tại sao **. Nhưng nó làm cho việc viết một số chương trình dễ dàng hơn một chút bằng cách tránh phải đi bộ mảng 'argv' chỉ để đếm các đối số. – pmg

40

Theo tiêu chuẩn, "argv [argc] phải là một con trỏ rỗng" (5.1.2.2.1).

+0

Tại sao và nó trở thành tiêu chuẩn như thế nào? Bất kỳ ý tưởng? – Reigel

+12

@Reigel: Trang người dùng cho 'exec' từ năm 1979 (http://plan9.bell-labs.com/7thEdMan/v7vol1.pdf) cho thấy rằng điều này có trước tiêu chuẩn một chút và chứa một gợi ý có thể có về tại sao nó theo cách này: "Argv là trực tiếp có thể sử dụng trong một execv khác bởi vì argv [argc] là 0." – bk1e

Các vấn đề liên quan