当需要向控制台打印C字节数组(不是ASCII)的内容时,'printf'在步进数组时具有的优点是每次使用后都不会返回。因此,阵列在屏幕上简洁地打印出来。然而,打印输出实际上需要一个年龄才能到达屏幕,在绝望中,我有时会打开或关闭“终端”,因为这似乎会清除打印输出('fflush'没有)。
另一方面,'NSLog'可以快速打印,但是在这里和其他地方经常会看到它必须通过数组的每一步都应用。不幸的是,这会在每次使用后插入一个返回,甚至会导致一个短数组覆盖页面并使其难以阅读或复制。为了记录,我认为值得指出的是,有一个简单的解决方案,使用'NSMutableString'和'appendFormat',在页面上打印。这是“花里胡哨”的版本,带有逗号,空格和括号,我可以方便地进行测试。它被构造为C函数并以十进制(%d)打印;对于其他格式,请参阅Apple在https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/introStrings.html的“字符串编程指南”。
void byteArrayLog(unsigned char *bArray, int numBytes)
{
int i;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableString* dString = [NSMutableString stringWithCapacity:5*numBytes];//Create a mutable string. Note the length.
[dString appendString:@"{"];//Start with "{".
for(i = 0; i < numBytes-1; i++)
[dString appendFormat:@"%d, ", bArray[i]];//Format a byte, follow with a comma and a space.
[dString appendFormat:@"%d}", bArray[i]];//Format the final byte, finish with a "}".
NSLog(@"Array contents = %@", dString);//Print to the console.
[pool drain];//Clean up.
}
答案 0 :(得分:1)
NSLog()
打印到标准错误流(stderr
),而printf()
打印到标准输出(stdout
)。似乎标准输出没有正确刷新,但标准错误流是 - 尝试使用
fprintf(stderr, "format string: %d", array[index]);
使用stderr
样式函数打印到printf()
。