慢跑Java解释器返回字符串控制台输出
问题描述:
我试图为iphone做一个Java解释器,但是我使用的library只打印控制台输出到NSLog/printf控制台。我希望它返回一个std :: string,我可以转换为NSString并显示在UITextView中。这是否做过?要么捕获控制台日志(它需要被appstore接受),要么改变源添加一个方法来返回一个字符串与缓冲区。慢跑Java解释器返回字符串控制台输出
答
C标准输入和输出库是你的朋友。
你应该知道NSLog输出到stderr和printf使用stdout。所以根据你的需要,你可以只重定向一个或两个,如果你需要所有的输出。假设我们将所有的流写入一个文件(在我们的stdout和sdterr的例子中是两个),然后当我们完成后关闭这些文件,然后您可以简单地使用文件保存到文档目录中来显示它们。
// get user directory
NSArray *allPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDIR = [allPaths objectAtIndex:0];
NSString *pathForLog = [documentsDIR stringByAppendingPathComponent:@"logFile.txt"];
NSString *pathForError = [documentsDIR stringByAppendingPathComponent:@"errorFile.txt"];
// redirect the stream
freopen([pathForError cStringUsingEncoding:NSASCIIStringEncoding],"w", stderr); // NSLog
freopen([pathForLog cStringUsingEncoding:NSASCIIStringEncoding], "w", stdout); // printf
// your log stuff
printf("i am a robot\n");
NSLog(@"And i do bip bipbip biiiip");
// when you are done, close the stream
fclose (stdout);
fclose (stderr);
// and retrieve your data, as NSString object (or whatever you want)
NSString* dataLog = [NSString stringWithContentsOfFile: pathForLog
encoding: NSASCIIStringEncoding
error: nil];
NSString* errorLog = [NSString stringWithContentsOfFile: pathForError
encoding: NSASCIIStringEncoding
error: nil];
+0
工程就像一个魅力! – 2013-03-22 14:28:38
什么样的字符串?一个'char *'或一个'wchar_t *'或一个'std :: string'或一个'NSString'? – 2013-03-22 07:08:49
转换是可能的,所以它没有关系。 – 2013-03-22 07:43:38