有人可以向我解释这个简单程序的输出:
#include <stdio.h>
int main(int argc, char *argv[])
{
char charArray[1024] = "";
char charArrayAgain[1024] = "";
int number;
number = 2;
sprintf(charArray, "%d", number);
printf("charArray : %s\n", charArray);
snprintf(charArrayAgain, 1, "%d", number);
printf("charArrayAgain : %s\n", charArrayAgain);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
./a.out
charArray : 2
charArrayAgain : // Why i don't have 2 here?
Run Code Online (Sandbox Code Playgroud)
谢谢.
我打印的浮点数在零之后被修剪为3位数,我想知道我是否可以有条件地追加一个+正数之前的数字,所以我得到
+0.005
Run Code Online (Sandbox Code Playgroud)
为了积极的改变和
-0.005
Run Code Online (Sandbox Code Playgroud)
为了消极的改变.这是否可以在printf中轻松实现?
为什么会出现这种情况?
# Printf.sprintf ("Foo %d %s") 2 "bar";;
- : string = "Foo 2 bar"
# Printf.sprintf ("Foo %d" ^ " %s") 2 "bar";;
Printf.sprintf ("Foo %d" ^ " %s") 2 "bar";;
Error: This expression has type string but an expression was expected of type
('a -> 'b -> 'c, unit, string) format =
('a -> 'b -> 'c, unit, string, string, string, string) format6
Run Code Online (Sandbox Code Playgroud)
我希望首先评估字符串连接,所以一切都会正常进行.这与Printf采用的类型系统技巧有关吗?
"_"是什么意思?为什么微软在一开始就添加这个标记?
该程序每行打印65k字节.
我测量吞吐量./a.out | pv >/dev/null并达到3 GB/s左右.
一旦我将线路长度更改为70k,吞吐量就会下降到~1 GB/s.
我在这里遇到了哪个瓶颈(CPU缓存,libc idiosynchrasy等)?
#include <stdio.h>
#include <string.h>
#define LEN 65000 // high throughput
// #define LEN 70000 // low throughput
int main ()
{
char s[LEN]; memset(s, 'a', LEN-1); s[LEN-1] = '\0';
while (1)
printf ("%s\n", s);
}
Run Code Online (Sandbox Code Playgroud)
更新:我在Core i5-2520M上运行64位Ubuntu 12.04,它有EGLIBC 2.15.
更新: puts (s)有同样的问题.
我有一个结构,指向结构的指针,我希望将前n个字节打印为长十六进制数,或者作为十六进制字节的字符串.
基本上我需要printf等效的gdb的检查内存命令,x/nxb.
如果可能的话,我仍然希望使用printf作为程序的记录器功能只是它的变体.如果我可以在不循环数据的情况下这样做,那就更好了.
我正在我的程序中逐个构建一个字符串,当我在末尾添加一个简单的字符串时,我正在混合使用strcat(),但是当我添加一个格式化的字符串时,我正在使用sprintf(),例如:
int one = 1;
sprintf(instruction + strlen(instruction), " number %d", one);
Run Code Online (Sandbox Code Playgroud)
是否可以使用strcat()连接格式化的字符串或者首选方法是什么?
我想在C中使用printf打印列.我写了这段代码:
#include <stdio.h>
void printme(char *txt1, char *txt2, char *txt3)
{
printf("TXT1: %9s TXT2 %9s TXT3 %9s\n", txt1, txt2, txt3);
}
int main()
{
printme("a","bbbbbbbeeeeebbbbb","e");
printme("aaaaaaaa","bbbbbbbbbbbb","abcde");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我有这样的输出:
TXT1: a TXT2 bbbbbbbeeeeebbbbb TXT3 e
TXT1: aaaaaaaa TXT2 bbbbbbbbbbbb TXT3 abcde
Run Code Online (Sandbox Code Playgroud)
所以列不是等宽的.基本上,我想这样做,无论我的论证中的文本有多长,我的函数总是打印出一个很好的格式化列.问题是:我该怎么做?
saing nice我的意思是无论文本传递给我的打印功能多长时间,它都会打印出等宽列,例如:
我有这样的输出,如下所示:
a cd` fg ij
a cd fg ij
a cd fg ij
ab cd fg ij
ab cd fg i j
ab cd fg ij
ab cd fg ij
ab cde fgh ij …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用printf和seq打印以下模式:
0000
0001
0002
0003
Run Code Online (Sandbox Code Playgroud)
我的问题是我曾经使用过:
seq 0 10 | xargs printf %04d
Run Code Online (Sandbox Code Playgroud)
我的所有输出格式化为相同的行likeo:
0000000100020003
Run Code Online (Sandbox Code Playgroud)
我仍然无法使用xargs.在这种情况下如何正确使用它?
通过阅读此代码,我偶然发现了以下printf()声明:
// reset, hide cursor and clear screen
printf("\e[0m\e[?25l\e[2J");
Run Code Online (Sandbox Code Playgroud)
我必须承认,我不是一名完全合格的C黑客,并且不完全理解这一点.我调整了一下,删除了论点,我理解它的作用(好吧,评论实际上说的都是这样),但我不知道它是如何完成的.此外,这是一个很难谷歌的东西.
这个printf()电话怎么样?
printf ×10
c ×6
bash ×1
benchmarking ×1
c++ ×1
caching ×1
format ×1
hex ×1
ocaml ×1
performance ×1
python ×1
seq ×1
string ×1
type-systems ×1
visual-c++ ×1
xargs ×1