此功能在OS X上存在,并允许您将自定义本地传递给该功能。setlocale不是线程安全的,因此按参数传递语言环境是安全的。
如果没有等效项,则可以使用任何与语言环境无关的方法printf或仅用于双精度(%g)的printf。
有没有人知道为什么如果我在延迟之前放一个printf,它等到延迟完成才打印出de消息?
Code1 with sleep():
int main (void)
{
printf ("hi world");
system("sleep 3");
}
Run Code Online (Sandbox Code Playgroud)
具有自实现延迟的Code2:
void delay(float sec)
{
time_t start;
time_t current;
time(&start);
do{
time(¤t);
}while(difftime(current,start) < sec);
}
int main (void)
{
printf ("hi world");
delay(3);
}
Run Code Online (Sandbox Code Playgroud)
而如果:
printf ("hi world");
delay(3);
printf ("hi world");
delay(3);
Run Code Online (Sandbox Code Playgroud)
它等到睡眠总和,然后它同时打印消息
为什么会这样?
更新:当我呼叫延迟时,我写了延迟("睡眠3"),我的意思是延迟(3).更正
我如何在C++中做这样的事情:
void my_print(format_string) {
vector<string> data;
//Fills vector
printf(format_string, data);
}
my_print("%1$s - %2$s - %3$s");
my_print("%3$s - %2$s);
Run Code Online (Sandbox Code Playgroud)
我之前没有解释过.格式字符串由应用程序用户输入.
在C#中,这有效:
void my_print(format_string) {
List<string> data = new List<string>();
//Fills list
Console.WriteLine(format_string, data.ToArray);
}
my_print("{0} - {1} - {2}");
my_print("{2} - {1}");
Run Code Online (Sandbox Code Playgroud) 这个非常简单的c程序在使用valgrind运行时会给我一个分段错误.它开始正常时运行良好.将USR1信号发送到进程时会崩溃.
问题似乎是printf处理浮点值格式化的方式,因为如果使用字符串(%s)或int(%d)格式参数,它可以正常工作.
PS我知道你不应该在信号处理程序中调用任何printf系列函数,但仍然为什么它只与valgrind崩溃.
#include <stdio.h>
#include <signal.h>
void sig_usr1(int sig) {
char buf[128];
snprintf(buf, sizeof(buf), "%f", 1.0);
}
int main(int argc, char **argv) {
(void) signal(SIGUSR1, sig_usr1);
while(1);
}
Run Code Online (Sandbox Code Playgroud) 如果我这样做:
void printfloat(float number)
{
printf("%f", number);
}
Run Code Online (Sandbox Code Playgroud)
和
void printdouble(double number)
{
printf("%f", number);
}
Run Code Online (Sandbox Code Playgroud)
每个函数可以输出的最大字符数是多少?
可能重复:
printf中格式说明符%i和%d之间的差异
我只是检查了引用,它说它们都表示有符号整数.我认为必须有一些区别
据我所知,如果printf没有参数,它会输出一个意外的值.
例:
#include <stdio.h>
int main() {
int test = 4 * 4
printf("The answer is: %d\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个随机数.在使用不同格式(如%p,%x等)后,它不会打印16(因为我没有将变量添加到参数部分)我想知道的是,这些值在哪里被采用从?它是堆栈的顶部吗?每次编译时都不是新值,这很奇怪,就像一个固定的值.
我试图调用printf来打印一个整数,把它打不到正确的值:
section .data
an: db 1
format: db "num: %d" , 10, 0
section .text
global main
extern printf
main:
push ebp
mov ebp,esp
mov eax, [an]
push eax
push dword format
call printf
add esp, 8
mov esp,ebp
pop ebp
mov eax, 0
ret
Run Code Online (Sandbox Code Playgroud)
此代码打印"num:1836412417"
当我尝试打印一个它有效的字符时!
section .data
an: db 'a'
format: db "num: %c" , 10, 0
section .text
global main
extern printf
main:
push ebp
mov ebp,esp
mov eax, [an]
push eax
push dword format
call printf …Run Code Online (Sandbox Code Playgroud) 在C编程练习中,我正在做这样的事情(只是简化):
printf( "%s", 0);
Run Code Online (Sandbox Code Playgroud)
输出是
(null)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我假设printf将零解释为a char *,那么NULL?我怎么能用这样的东西复制这个结果
char string[] = NULL; //compiler-error
printf( "%s", string);
Run Code Online (Sandbox Code Playgroud)
?