Apple的字符串格式说明符记录了声明,
NSString格式化方法和CFString格式化函数支持的格式说明符遵循IEEE printf规范 ; ...您也可以将这些格式说明符与NSLog函数一起使用.
但是,尽管printf规范定义%C作为等同于%lc和%S作为等同于%ls只%C和%S看起来与正常工作NSLog和+[NSString stringWithFormat:].
例如,请考虑以下代码:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
unichar str[3];
str[0] = 63743;
str[1] = 33;
str[2] = (unichar)NULL;
NSLog(@"NSLog");
NSLog(@"%%S: %S", str);
NSLog(@"%%ls: %ls", str);
NSLog(@"%%C: %C", str[0]);
NSLog(@"%%lc: %lc", str[0]);
NSLog(@"\n");
NSLog(@"+[NSString stringWithFormat:]");
NSLog(@"%%S: %@", [NSString stringWithFormat:@"%S", str]);
NSLog(@"%%ls: …Run Code Online (Sandbox Code Playgroud) main()
{
int i=5;
printf("%d%d%d%d%d%d",i++,i--,++i,--i,i);
}
Run Code Online (Sandbox Code Playgroud)
输出是45545,但我不知道它是如何工作的.有人说函数调用中的参数从左到右被压入堆栈.
我正在研究一些我无法完全谈论的事情.我只能说我是信息安全和计算机科学的学生.
我只需要在python中更改一些深层次的源代码.现在,我特意想更改内置打印功能中的源代码.不幸的是,我找不到它定义在python源代码文件中的任何位置.
有什么想法吗?
非常感谢.
编辑:具体的问题是询问Python中的打印功能是否可以被其他东西覆盖.这是为了在Python解释器中植入后门.
这是我的第一个pthread程序,我不知道为什么printf语句在子线程中打印两次:
int x = 1;
void *func(void *p)
{
x = x + 1;
printf("tid %ld: x is %d\n", pthread_self(), x);
return NULL;
}
int main(void)
{
pthread_t tid;
pthread_create(&tid, NULL, func, NULL);
printf("main thread: %ld\n", pthread_self());
func(NULL);
}
Run Code Online (Sandbox Code Playgroud)
在我的平台上观察到的输出(Linux 3.2.0-32-generic#51-Ubuntu SMP x86_64 GNU/Linux):
1.
main thread: 140144423188224
tid 140144423188224: x is 2
2.
main thread: 140144423188224
tid 140144423188224: x is 3
3.
main thread: 139716926285568
tid 139716926285568: x is 2
tid 139716918028032: x is 3
tid 139716918028032: x is …Run Code Online (Sandbox Code Playgroud) 我的直觉答案是肯定的,实现也可以由"printf"使用.对于用户定义的类型,可能很容易超载.
有没有人曾尝试过这个?
我想要一个FILE*类型使用fprintf.我需要用来fdopen获得一个FILE*而不是open那个返回一个int.但是,我们可以做同样的fdopen和open?(我从未使用过fdopen)
我想这样做fdopen:
open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
Run Code Online (Sandbox Code Playgroud) 是否可以控制printf的科学记法(e)打印的指数中显示的位数?
这段代码
#include <stdio.h>
int main(void) {
printf("%6.3e", 403.0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生(取决于编译器/平台):
4.030e+002(VS2010)或4.030e+02(gcc 4.3.4)或甚至4.030e+2
在比较不同平台上生成的文件时,指数中不同的位数很容易混淆diff工具.
我正在尝试格式化浮点数在数字前面有一个美元符号.目前我正试图从左侧打印150个空格.
System.out.printf("%150.2f", orderTotal);
这就是我正在使用的但我无法弄清楚在哪里放$我想我可以把整个东西变成一个字符串,但我想知道是否有办法做我正在寻找的东西?
我里面有一根很长的绳子sprintf().它是如此之长,以至于它有用(可读性)来打破它(但只在源代码中,而不是在输出中).但每当我打破长字符串时,它就会引入a \n,因此输出也有一个换行符.如何在源代码中打破字符串,使其在输出中不被破坏?
实际上,我在Gnuplot中遇到了这个问题。但是以一种简单的方式,问题是我想使用sprintf以字符串格式打印,即使字符串由数字和符号组成。像这样:
a = '12/7'
sprintf('%.f', a)
Run Code Online (Sandbox Code Playgroud)
我可以在Gnuplot中运行它,但是它只显示符号“ /”之前的数字。我希望输出应打印出变量a'12 / 7'的所有内容。对这种情况有什么建议吗?