2010-09-19 35 views
5

Tôi có một hàm, và tôi muốn chuyển một mảng char * vào nó, nhưng tôi không muốn tạo biến chỉ để làm điều đó, như này:C: Chuyển mảng vào một hàm 'đang di chuyển'

char *bar[]={"aa","bb","cc"}; 
foobar=foo(bar); 

Để khắc phục điều đó, tôi đã cố gắng này:

foobar=foo({"aa","bb","cc"}); 

Nhưng nó không hoạt động. Tôi cũng đã thử điều này:

foobar=foo("aa\0bb\0cc"); 

Nó biên dịch cảnh báo và nếu tôi thực thi chương trình, nó sẽ bị treo.
Tôi đã thử chơi một chút với dấu sao và dấu và quá nhưng tôi không thể làm cho nó hoạt động bình thường.

Thậm chí có thể không? Nếu vậy, làm thế nào?

Trả lời

16

Có, bạn có thể sử dụng ký tự hợp chất. Lưu ý rằng bạn sẽ cần phải cung cấp một số cách để hàm biết chiều dài của mảng. Một là phải có NULL ở cuối.

foo((char *[]){"aa","bb","cc",NULL}); 

Tính năng này được thêm vào C99.

+0

Và do đó có thể không có sẵn nếu trình biên dịch là MSVC. –

+0

+1 để đề cập rằng đây là tính năng C99 –

+0

Cảm ơn, đó chỉ là những gì tôi cần. –

5

Bạn cần phải khai báo kiểu cho hợp chất của bạn theo nghĩa đen:

foobar = foo((char *[]){"aa", "bb", "cc"}); 
1

Một số lần tranh cãi biến là đủ:

#include <stdarg.h> 
#include <stdio.h> 

void func(int n, ...) 
{ 
    va_list args; 
    va_start(args, n); 
    while (n--) 
    { 
    const char *e = va_arg(args, const char *); 
    printf("%s\n", e); 
    } 
    va_end(args); 
} 

int main() 
{ 
    func(3, "A", "B", "C"); 
    return 0; 
} 

Nhưng tôi thường thích các phương pháp được đề xuất bởi Matthew và Carl.

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