在纯 C 中获取 NSHomeDirectory() [已关闭]

Get NSHomeDirectory() in pure C [closed]

提问人:Jack 提问时间:4/20/2023 最后编辑:user16217248Jack 更新时间:4/20/2023 访问量:110

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

7个月前关闭。

我正在尝试在纯 C 中获得NSHomeDirectory()

#include <CoreFoundation/CFBundle.h>
#include <CoreFoundation/CoreFoundation.h>

void testFunc() {
    printf(NSHomeDirectory()); 
}
objective-c nsstring nshomedirectory

评论

1赞 Jonathan Leffler 4/20/2023
你的问题是什么?这不是一个好的使用方式——使用起来会更安全,但这不太可能是你的问题。编译代码、链接代码或运行代码时是否出现问题?你可能应该提到你正在尝试在 macOS X 上工作,并且大概你正在使用 Xcode——但你使用的是 IDE 还是只是命令行工具?printf()printf("%s\n", NSHomeDirectory())
0赞 Cy-4AH 4/20/2023
CFCopyHomeDirectoryURL()?
0赞 Cy-4AH 4/21/2023
这回答了你的问题吗?使用 C++ 在 iOS 中创建目录/文件

答:

3赞 user16217248 4/20/2023 #1

您需要将消息发送到 返回的对象以获取 C 字符串。要在纯 C 中执行此操作(已测试):UTF8StringNSStringNSHomeDirectory()

#include <objc/runtime.h>
#include <objc/message.h>
void *NSHomeDirectory();
void testFunc() {
    puts(((const char *(*)(void *, SEL))objc_msgSend)(NSHomeDirectory(), sel_getUid("UTF8String")));
    // Also use puts() instead of printf() here
}

注意:使用 -framework Cocoa 编译

评论

1赞 user16217248 4/20/2023
@Mohab 如果你在 Objective-C 中,你会得到什么?NSLog(NSHomeDirectory())
1赞 Jack 4/20/2023
我只是得到“/Users/mohabhisham/Library/Developer/CoreSimulator/Devices/7B0A58B1-92DD-4C1E-9544-53BC319D6AB1/data/Containers/Data/Application/7F7BBF73-A6E2-410C-B83A-0DF29D152A05”
1赞 Jack 4/20/2023
使用您的代码,它会打印额外的内容
1赞 user16217248 4/20/2023
@Mohab 无法重现。你用的是什么系统?如果你尝试使用 Objective-C 会发生什么?NSLog(NSHomeDirectory().UTF8String)
1赞 Jack 4/20/2023
它打印相同的“211”内容