based on our discussion it seems that parameter in your C function should be char *p[]
I made a small test
//
// f.h
// test001
//
#ifndef f_h
#define f_h
#include <stdio.h>
void f(char *p[], int len);
#endif /* f_h */
I defined the function with some basic functionality
//
// f.c
// test001
#include "f.h"
void f(char *p[], int len) {
for(int i = 0; i<len; i++) {
printf("%s\n", p[i]);
};
};
with the required bridging header
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#include "f.h"
and swift 'command line' application
//
// main.swift
// test001
//
import Darwin
var s0 = strdup("alfa")
var s1 = strdup("beta")
var s2 = strdup("gama")
var s3 = strdup("delta")
var arr = [s0,s1,s2,s3]
let ac = Int32(arr.count)
arr.withUnsafeMutableBytes { (p) -> () in
let pp = p.baseAddress?.assumingMemoryBound(to: UnsafeMutablePointer<Int8>?.self)
f(pp, ac)
}
it finally prints
alfa
beta
gama
delta
Program ended with exit code: 0
based on the result, your have to use
let count = CInt(cArgs.count)
cArgs.withUnsafeMutableBytes { (p) -> () in
let pp = p.baseAddress?.assumingMemoryBound(to: UnsafeMutablePointer<Int8>?.self)
cmdLnConf = cmd_ln_parse_r(nil, ps_args(), count, pp, STrue)
}
WARNING!!!
don't call cArgs.count
inside the closure, where the pointer is defined!
[UnsafeMutablePointer<Int8>]
it's expectingUnsafeMutablePointer<Int8>
, (so without the brackets)... – l'L'l