标签: printf

为什么这个简短的OCaml片段与Printf.printf不起作用?

我是OCaml的新手.我正在玩"你好世界"类型的片段,并遇到了这种情况.这是与翻译的会话,并附加一些额外的评论:

# let average a b = 
  (a +. b) /. 2.;;
val average : float -> float -> float = <fun>
# average 1. 4.;;
- : float = 2.5
# string_of_float (average 1. 4.);;
- : string = "2.5"

(* this fails...*)
# let _ = Printf.printf (string_of_float (average 1. 4.));;
Error: This expression has type string but an expression was expected of type
         ('a, out_channel, unit) format =
           ('a, out_channel, unit, unit, unit, unit) format6

(* yet …
Run Code Online (Sandbox Code Playgroud)

printf ocaml

9
推荐指数
1
解决办法
3347
查看次数

如何将printf输出重定向回代码?

我正在编写一个小的c ++应用程序来包装opencv haar训练函数(即cvCreateTreeCascadeClassifier).该函数将整个输出加载到控制台,我希望解析此输出,以便我可以在我的代码中填充各种变量.

我想使用的函数不是实际的openCV库的一部分; 相反,它必须使用我的代码构建作为项目的一部分.函数的所有输出都是通过printf输出的.

问题:是否可以在最终出现在控制台上之前拦截printf语句?我已经设法使用freopen重定向它们,但这似乎有点笨拙,因为我需要解析文件然后在函数调用完成后删除它.此外,该功能可能会运行几个小时(甚至可能是几周!),因此如果文件的大小也经常被附加,那么文件的大小可能会成为问题.

要求:我需要这个应用程序是c ++并在Windows和Linux上运行(但如果需要,条件编译语句没有问题).我还希望能够在控制台上看到我的cout和cerr消息(只是不是printf).

我的谷歌搜索已经取消了我的生活意愿!任何人都可以通过代码示例或指向我应该寻找答案的地方的指针帮助解决方案吗?

谢谢

c++ console printf redirect opencv

9
推荐指数
1
解决办法
5167
查看次数

为C printf设置千位分隔符

我有这个C代码:

locale_t myLocale = newlocale(LC_NUMERIC_MASK, "en_US", (locale_t) 0);
uselocale(myLocale);
ptrLocale = localeconv();
ptrLocale->thousands_sep = (char *) "'";

int i1 = snprintf( s1, sizeof(s1), "%'d", 123456789);
Run Code Online (Sandbox Code Playgroud)

输出s1是123,456,789.

即使我设置->thousands_sep到'它被忽略.有没有办法将任何字符设置为千位分隔符?

c printf locale

9
推荐指数
1
解决办法
9580
查看次数

如何使用printf多次打印字符?

使用printf,可以多次打印一个字符:

$ printf "%0.s-" {1..5}
-----
Run Code Online (Sandbox Code Playgroud)

在awk我知道我可以做类似:

$ awk 'BEGIN {while (i++ < 5) printf "-"}'
-----
Run Code Online (Sandbox Code Playgroud)

但我想知道awk是否printf允许这样做.

我浏览了printf修饰符页面,但无法找到.总而言之,Bash的printf是为每个参数扩展{1..5}和打印一个-,所以它相当于说

$ printf "%0.s-" hello how are you 42
-----
Run Code Online (Sandbox Code Playgroud)

但是,我缺乏如何使用awk的printf来模仿这种行为的知识,如果可能的话,因为这会失败:

$ awk 'BEGIN {printf "%0.s-", 1 2 3 4 5}'
-
Run Code Online (Sandbox Code Playgroud)

awk printf gawk

9
推荐指数
2
解决办法
5805
查看次数

printf两次参数

我想传递一个额外的参数printf并打印两次,例如

printf("%s%s","somestring");       // prints somestringsomestring
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

c printf

9
推荐指数
1
解决办法
2835
查看次数

在纯C中打印void类型

我有一个像这样的功能

void printMe (void *i)
{
    printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)

我想传递一个无效指针并将其打印到屏幕上.上面的例子很好,如果i是整数,浮点数或双精度数,但如果我是一个char则崩溃.C中没有像我通常在C++中使用的那样重载.所以问题是这样,我们可以在C中创建一个函数来打印它作为参数的元素,如果是的话,这是怎么可能的,因为它在这一刻完全无法实现.

c printf type-conversion void

8
推荐指数
2
解决办法
3万
查看次数

glibc是否实现了fprintf()线程安全?

fprintf是线程安全的吗? glibc手册似乎说它是,但我的应用程序,使用单个调用fprintf()写入文件似乎是混合来自不同进程的部分写入.

编辑:为了澄清,有问题的程序是一个lighttpd插件,服务器正在运行多个工作线程.

查看该文件,一些写入混合在一起.

编辑2:我看到的问题似乎可能是由于lighttpd的"工作线程"实际上是单独的进程: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor

问题

通过在同一个套接字上运行2个或更多进程,您将获得更好的并发性,但是您必须注意一些缺点:

  • mod_accesslog可能会创建损坏的访问日志,因为同一个文件打开两次并且未同步.
  • mod_status将有n个独立的计数器,每个进程一个.
  • mod_rrdtool将失败,因为它收到两次相同的时间戳.
  • mod_uploadprogress将不会显示正确的状态.

c printf multithreading posix lighttpd

8
推荐指数
2
解决办法
1万
查看次数

在awk中打​​印长整数

我有一个管道分隔的feed文件,它有几个字段.由于我只需要一些,我想用它awk来捕获它们用于我的测试目的.但是,我注意到printf如果我使用它会更改值"%d".如果我使用,它工作正常"%s".

Feed文件示例:

[jaypal:~/Temp] cat temp

302610004125074|19769904399993903|30|15|2012-01-13 17:20:02.346000|2012-01-13 17:20:03.307000|E072AE4B|587244|316|13|GSM|1|SUCC|0|1|255|2|2|0|213|2|0|6|0|0|0|0|0|10|16473840051|30|302610|235|250|0|7|0|0|0|0|0|10|54320058002|906|722310|2|0||0|BELL MOBILITY CELLULAR, INC|BELL MOBILITY CELLULAR, INC|Bell Mobility|AMX ARGENTINA SA.|Claro aka CTI Movil|CAN|ARG|

我有兴趣捕捉second column它是哪个19769904399993903.

这是我的测试:

[jaypal:~/Temp] awk -F"|" '{printf ("%d\n",$2)}' temp
19769904399993904   # Value is changed
Run Code Online (Sandbox Code Playgroud)

但是,以下两个测试工作正常 -

[jaypal:~/Temp] awk -F"|" '{printf ("%s\n",$2)}' temp
19769904399993903   # Value remains same

[jaypal:~/Temp] awk -F"|" '{print $2}' temp
19769904399993903   # Value remains same
Run Code Online (Sandbox Code Playgroud)

所以这是一个"%d"无法处理长整数的限制.如果是这样的话,为什么会在数字中加一个而不是截断呢?

我试过这个BSD和GNU版本的awk. …

printing awk printf gawk

8
推荐指数
2
解决办法
1万
查看次数

C中的通用编程

我正在用纯C编写通用链表实现.

struct Node {
    void *value;
    struct Node *next;
};

struct LinkedList {
    struct Node *start;
    struct Node *end;
};

void LinkedList_new(struct LinkedList* llist) {
    llist->start = 0;
    llist->end = 0;
    return;
}

void addNode( struct LinkedList *ll, void *_value ) {
    if ( NULL == ll->start ) {
        ll->start = (struct Node *) malloc( sizeof(struct Node) );
        ll->end = ll->start;
    } else {
        ll->end->next = (struct Node *) malloc( sizeof(struct Node) );
        ll->end = ll->end->next;
    }
    ll->end->value = _value; …
Run Code Online (Sandbox Code Playgroud)

c generics printf generic-programming void-pointers

8
推荐指数
1
解决办法
7206
查看次数

printf格式为1字节有符号数

假设如下:

sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 8
Run Code Online (Sandbox Code Playgroud)

对于4字节有符号数,printf2字节有符号数的格式%hd是%d,对于8字节有符号数%ld,但是1字节有符号数的正确格式是什么?

c printf

8
推荐指数
1
解决办法
2万
查看次数