2010-07-29 47 views
7

Tôi đang cố gắng so sánh tham số lệnh với argv [] nhưng nó không hoạt động. Đây là mã của tôi.So sánh tham số lệnh với argv [] không hoạt động

./a.out -d 1 

Trong hàm main

int main (int argc, char * const argv[]) { 

if (argv[1] == "-d") 

    // call some function here 

} 

Nhưng điều này không hoạt động ... Tôi không biết tại sao so sánh này không hoạt động.

+0

Xem câu trả lời của tôi ở đây: http: // stackoverflow .com/question/3303164/why-isnt-if-maya-maya-true-in-c/3303176 # 3303176 –

Trả lời

23

Bạn không thể so sánh các chuỗi bằng cách sử dụng ==. Thay vào đó, hãy sử dụng strcmp.

#include <string.h> 

int main (int argc, char * const argv[]) { 

if (strcmp(argv[1], "-d") == 0) 

// call some function here 

} 

Lý do cho điều này là giá trị của "..." là một con trỏ đại diện cho các vị trí của ký tự đầu tiên trong chuỗi với phần còn lại của các ký tự sau nó. Khi bạn chỉ định "-d" trong mã của mình, nó sẽ tạo một chuỗi hoàn toàn mới trong bộ nhớ. Vì vị trí của chuỗi mới và argv[1] không giống nhau, == sẽ trả lại 0.

+1

Bạn có thể muốn đề cập rằng lý do chuỗi C không thể so sánh được vì nó không so sánh nội dung, chỉ là con trỏ. –

+0

hoặc nếu bạn biết args của bạn là chữ cái duy nhất (argv [1] [1] == 'd') –

+0

@Cristian: Tôi đã chỉnh sửa, cảm ơn vì đã chỉ ra điều đó. – Adrian

-4

sẽ không có được:

if (argv[0] == "-d") 

0 không 1?

+0

Không, vì phần tử đầu tiên của 'argv' là tên chương trình. – Adrian

+1

không, C và C++ có char [] đối với các chuỗi ký tự như thế này; nó biến thành một con trỏ so sánh –

+1

Nop. Đầu tiên, bạn đang so sánh địa chỉ chứ không phải nội dung. Thứ hai, argv [0] là đường dẫn lệnh. – ninjalj

2

Bạn có thể muốn sử dụng strcmp tại đây.

9

Trong C++ chúng ta hãy std :: string làm việc cho bạn:

#include <string> 
int main (int argc, char * const argv[]) { 

if (argv[1] == std::string("-d")) 

// call some function here 

} 

Trong C bạn sẽ phải sử dụng strcmp:

if (strcmp(argv[1], "-d") == 0) 

// call some function here 

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