相关疑难解决方法(0)

命令行C程序到Swift

我有一个命令行的源代码C game,等待用户stdin和输出stdout.我想从文本字段输入main到此C代码的输入,并在文本区域字段中输出例如.

int mainer(int argc, char **argv) {
    int i;
    int hitme;
    char ch;
    prelim();

    if (argc > 1) { // look for -f option
        if (strcmp(argv[1], "-f")== 0) {
            coordfixed = 1;
            argc--;
            argv++;
        }
    }


    if (argc > 1) {
        fromcommandline = 1;
        line[0] = '\0';
        while (--argc > 0) {
            strcat(line, *(++argv));
            strcat(line, " ");
        }
    }
    else fromcommandline = 0;
 // some other code

}
Run Code Online (Sandbox Code Playgroud)

从 …

c command-line-interface ios swift

15
推荐指数
1
解决办法
422
查看次数

字符串值为UnsafePointer <UInt8>函数参数行为

我发现以下代码编译和工作:

func foo(p:UnsafePointer<UInt8>) {
    var p = p
    for p; p.memory != 0; p++ {
        print(String(format:"%2X", p.memory))
    }
}

let str:String = "??"
foo(str)
Run Code Online (Sandbox Code Playgroud)

这打印E4BB8AE697A5,这是一个有效的UTF8表示??

据我所知,这是无证行为.来自文件:

当函数声明为采用UnsafePointer参数时,它可以接受以下任何一种:

  • nil,作为空指针传递
  • UnsafePointer,UnsafeMutablePointer或AutoreleasingUnsafeMutablePointer值,必要时转换为UnsafePointer
  • 一个输入输出表达式,其操作数是类型为Type的左值,它作为左值的地址传递
  • 一个[Type]值,作为指向数组开头的指针传递,并在调用期间延长生命周期

在这种情况下,str不属于他们.

我错过了什么吗?


添加:

如果参数类型是,则它不起作用 UnsafePointer<UInt16>

func foo(p:UnsafePointer<UInt16>) {
    var p = p
    for p; p.memory != 0; p++ {
        print(String(format:"%4X", p.memory))
    }
}
let str:String = "??"
foo(str)
//  ^ 'String' is not convertible to 'UnsafePointer<UInt16>'
Run Code Online (Sandbox Code Playgroud)

即使内部String表示是UTF16

let str = "??" …
Run Code Online (Sandbox Code Playgroud)

swift

12
推荐指数
1
解决办法
5620
查看次数

将Swift数组String转换为C字符串数组指针

我在Swift 3上,我需要与一个C API进行交互,它接受一个以NULL结尾的字符串列表,例如

const char *cmd[] = {"name1", "value1", NULL};
command(cmd);
Run Code Online (Sandbox Code Playgroud)

在Swift中,API被导入为

func command(_ args: UnsafeMutablePointer<UnsafePointer<Int8>?>!)
Run Code Online (Sandbox Code Playgroud)

在尝试使用类型转换数百次后,unsafeAddress(of:)我仍然无法完成这项工作.即使我传递了一个通过编译的有效指针,它也会在运行时崩溃,说无效的内存访问(在strlen函数中).或者也许这是关于ARC的事情?

let array = ["name1", "value1", nil]

// ???
// args: UnsafeMutablePointer<UnsafePointer<Int8>?>

command(args)
Run Code Online (Sandbox Code Playgroud)

pointers swift swift3

5
推荐指数
1
解决办法
1430
查看次数

标签 统计

swift ×3

c ×1

command-line-interface ×1

ios ×1

pointers ×1

swift3 ×1