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工具.
临时解决方法
我使用微小的printf解决了这个问题:
可能newlib printf占用了太多内存。此后,PC会更改一些奇怪的东西,从理论上讲,这应该是数组的结尾char[100]。
cp = buf + BUF
Run Code Online (Sandbox Code Playgroud)
稍后它尝试执行
*--cp = something
Run Code Online (Sandbox Code Playgroud)
它崩溃了。内存错误?有很多我不理解的事情。例如,我不确定链接描述文件是否正确,或者syscall函数是否正确。在获得进一步的了解之前,我必须坚持使用小巧的printf。
原版的
我有一个STM32F103RB板(Nucleo),而USART1才可以工作。另外,我测试了Newlib函数,并按puts()预期工作。但是,当我尝试printf()用于整数时,如下所示:
printf("ADC: %d\r\n", test);
Run Code Online (Sandbox Code Playgroud)
如果test < 10程序正常运行,但是test >= 10产生了严重故障。经过一些GDB调试后,我发现它是从vfprintf生成的:
#0 HardFault_Handler () at main.c:136
#1 <signal handler called>
#2 0x08005af4 in _vfprintf_r (data=<optimized out>, fp=0x20000384 <impure_data+852>, fmt0=fmt0@entry=0x20004f57 " \254\264", ap=...,
ap@entry=...) at ../../../../../../newlib/libc/stdio/vfprintf.c:1601
#3 0x08004fd0 in printf (fmt=0x800b4ac "ADC: %d\n\r") at ../../../../../../newlib/libc/stdio/printf.c:52
#4 0x080004e8 in main () at main.c:168
Run Code Online (Sandbox Code Playgroud)
我想不出任何解决方案。这是我的_sbrk():
caddr_t …Run Code Online (Sandbox Code Playgroud) 我正在尝试格式化浮点数在数字前面有一个美元符号.目前我正试图从左侧打印150个空格.
System.out.printf("%150.2f", orderTotal);
这就是我正在使用的但我无法弄清楚在哪里放$我想我可以把整个东西变成一个字符串,但我想知道是否有办法做我正在寻找的东西?
我想实现fmt::Display我的代码中常用的嵌套结构.
// The root structure
pub struct WhisperFile<'a> {
pub path: &'a str,
pub handle: RefCell<File>,
pub header: Header
}
pub struct Header{
pub metadata: metadata::Metadata,
pub archive_infos: Vec<archive_info::ArchiveInfo>
}
pub struct Metadata {
// SNIP
}
pub struct ArchiveInfo {
// SNIP
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这是一个非平凡的数据树.当呈现为一行时,该archive_infos属性Header可以很长.
我想发布一些东西
WhisperFile ({PATH})
Metadata
...
ArchiveInfo (0)
...
ArchiveInfo (N)
...
Run Code Online (Sandbox Code Playgroud)
但是当我尝试显示时,Vec<ArchiveInfo>我得到的显示没有实现.我可以实现fmt::Display,ArchiveInfo但这还不够,因为fmt::Display没有为父容器实现Vec.如果我实现FMT ::显示collections::vec::Vec<ArchiveInfo>我得到the impl does not …
当我使用fprintf:
fprintf(somefile,"%c",'\n');
Run Code Online (Sandbox Code Playgroud)
它将"\ r \n"打印到文件中.我如何打印'\n'?
我正在写一个二进制文件.上面的代码仅用于调试.