提问人:Jack 提问时间:4/20/2023 最后编辑:user16217248Jack 更新时间:4/20/2023 访问量:110
在纯 C 中获取 NSHomeDirectory() [已关闭]
Get NSHomeDirectory() in pure C [closed]
问:
我正在尝试在纯 C 中获得NSHomeDirectory()
#include <CoreFoundation/CFBundle.h>
#include <CoreFoundation/CoreFoundation.h>
void testFunc() {
printf(NSHomeDirectory());
}
答:
3赞
user16217248
4/20/2023
#1
您需要将消息发送到 返回的对象以获取 C 字符串。要在纯 C 中执行此操作(已测试):UTF8String
NSString
NSHomeDirectory()
#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”内容
评论
printf()
printf("%s\n", NSHomeDirectory())
CFCopyHomeDirectoryURL()
?