2010-11-09 23 views

Trả lời

4

Nếu bạn muốn tạo chuỗi ra khỏi danh mục đầu vào thông qua, bạn cũng có thể thêm con trỏ ký tự để tạo chuỗi cho chính mình

#include <iostream> 
#include <string> 
using namespace std; 

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

string passedValue; 
for(int i = 1; i < argc; i++) 
passedValue += argv[i]; 
    // ... 
    return 0; 
} 
+1

"' + = '" sẽ kết hợp chúng lại với nhau. 'passingValue.append (argv [i]). append (" ")' trông đẹp hơn. –

2

Không. Điều đó không được phép. Nếu có, nó bắt buộc phải là char * argv [].

BTW, trong chính C++ phải luôn được khai báo để trả về 'int'

2

chính nhận char *. bạn sẽ phải đặt mảng argv vào std :: strings mình.

+0

chính không chuyển bất kỳ thứ gì. thay vào đó, chính được chuyển char * bằng CRT – Chubsdad

3

Bạn không thể thực hiện theo cách đó, vì hàm chính được khai báo rõ ràng vì nó là một điểm vào. Lưu ý rằng CRT không biết gì về STL vì vậy sẽ barf anyway. Hãy thử:

#include <string> 
#include <vector> 

int main(int argc, char* argv[]) 
{ 
    std::vector<std::string> args; 
    for(int i(0); i < argc; ++i) 
     args.push_back(argv[i]); 

    // ... 

    return(0); 
}; // eo main 
+1

thề. giống như cú pháp i (0) +1 – Chubsdad

+4

Vì bạn biết kích thước của véc-tơ kết quả, bạn có thể sử dụng hàm tạo kích thước của vector để preallocate, tránh nhiều khả năng tái phân bổ với .push_back(). Bạn cũng có thể sử dụng hàm tạo lặp của vectơ để tránh phải tự viết vòng lặp. – luke

+0

@ luke, yup Tôi đã thấy câu trả lời của bạn và đã +1 nó vì nó sạch hơn tôi nhiều. –

3

Đó sẽ là phi tiêu chuẩn vì chuẩn trong 3.6.1 nói

An thực hiện sẽ không ấn định trước các hàm main. Chức năng này sẽ không bị quá tải. Nó sẽ có kiểu trả về kiểu int, nhưng nếu không thì kiểu của nó được định nghĩa thực hiện. Tất cả việc triển khai sẽ cho phép cả hai định nghĩa sau đây của chính:

int main() { /* ... */ }

int main(int argc, char* argv[]) { /* ... */ }

+0

+1: bằng cách nào đó acrobat được treo trên máy của tôi :) – Chubsdad

+0

@Chubsdad: Tôi sử dụng Foxit ';-)' –

26

Bạn không thể thay đổi chữ ký chính, vì vậy đây là lựa chọn tốt nhất của bạn:

#include <string> 
#include <vector> 

int main(int argc, char* argv[]) 
{ 
    std::vector<std::string> params(argv, argv+argc); 
    // ... 
    return 0; 
} 
+1

Yep, '+ 1' từ tôi, mặc dù thông thường bạn muốn' argv + 1, argv + argc' (vì 'argv + 0' là tên ứng dụng). – sbi

+0

+1 cho một cách thực sự tốt: đơn giản và hiệu quả. –

+0

@sbi, vâng - điều quan trọng cần ghi nhớ, nhưng tôi đã cố giữ nó đơn giản :) – luke

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