2011-11-22 24 views
8

Tôi đang cố gắng chuyển hai tham số cho một chuỗi trong C. Tôi đã tạo một mảng (có kích thước 2) và đang cố chuyển mảng đó vào chuỗi. Đây có phải là cách tiếp cận đúng để truyền nhiều thông số vào một chuỗi không?Làm thế nào để chuyển nhiều tham số vào một chuỗi trong C

// parameters of input. These are two random numbers 
int track_no = rand()%15; // getting the track number for the thread 
int number = rand()%20 + 1; // this represents the work that needs to be done 
int *parameters[2]; 
parameters[0]=track_no; 
parameters[1]=number; 

// the thread is created here 
pthread_t server_thread; 
int server_thread_status; 
//somehow pass two parameters into the thread 
server_thread_status = pthread_create(&server_thread, NULL, disk_access, parameters); 
+1

Kiểm tra mã của bạn bạn đang khai báo một mảng các con trỏ đến int và gán chúng với giá trị int. – Teudimundo

+0

Tôi đã nhận thấy cảnh báo đó. Nó sẽ là hợp pháp nếu tham số không phải là con trỏ và chỉ đơn giản là một mảng? –

+0

nếu bạn khai báo tham số là một mảng int ("int parameter [2];"), thì bạn có thể chuyển tham số như một con trỏ. Nó là con trỏ đến int đầu tiên. Sau đó, bạn có thể truy cập nó từ chuỗi dưới dạng mảng. – Teudimundo

Trả lời

15

Vì bạn vượt qua trong một con trỏ void, nó có thể trỏ đến bất cứ điều gì, kể cả một cấu trúc, theo ví dụ sau:

typedef struct s_xyzzy { 
    int num; 
    char name[20]; 
    float secret; 
} xyzzy; 

xyzzy plugh; 
plugh.num = 42; 
strcpy (plugh.name, "paxdiablo"); 
plugh.secret = 3.141592653589; 

status = pthread_create (&server_thread, NULL, disk_access, &plugh); 
// pthread_join down here somewhere to ensure plugh 
// stay in scope while server_thread is using it. 
+3

Tất nhiên, trong mã như được hiển thị trong ví dụ trên, bạn phải đảm bảo rằng cấu trúc không bị phá hủy trong khi luồng cố gắng không quan tâm đến opinter đã cho. –

+0

Việc sửa chữa dễ nhất là 'malloc' cấu trúc và làm cho luồng mới chịu trách nhiệm giải phóng nó. Một cách tiếp cận khác là đặt một rào chắn bên trong cấu trúc và có cả chuỗi gốc và luồng mới chờ đợi trên hàng rào trước khi chuỗi trả về ban đầu. –

+0

@ FrerichRaabe Có lẽ một câu hỏi ngu ngốc, nhưng làm thế nào để cấu trúc "bị phá hủy" ... ngoài một cuộc gọi đến 'free()' (nếu nó là 'malloc'ed) hoặc hàm trả về (nếu nó được cấp phát trên stack), có cách nào khác không? – The111

1

Đó là một cách. Cách thông thường khác là chuyển con trỏ đến struct. Bằng cách này, bạn có thể có các kiểu "tham số" khác nhau và các tham số được đặt tên thay vì được lập chỉ mục, có thể làm cho mã này dễ đọc hơn/đôi khi dễ dàng hơn.

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