Tag: printf

如何使用fprintf并写入管道?

我创建了一个管道,并使用dup2()将流1和2(stdout和stderr)覆盖到这些管道中。 现在我希望使用fprintf写入流1或2,但我的程序似乎没有在管道的另一端接收任何东西。 我已经尝试过使用printf(),但我不确定这是默认写入stdout还是流1。 如果它写入流1,我想它在我的代码更深处的问题。 基本上我问,给定一个表示流的int,我如何得到一个适合在fprintf()中使用的FILE *?

为什么printf没有使用科学记数法?

我知道这是一个常见的问题。 但是我找不到一个可靠的直接答案。 16 ^ 54 = 1.0531229167e+65 (this is the result I want) 当我使用pow(16,54) ,我得到: 105312291668557186697918027683670432318895095400549111254310977536.0 代码如下: #include #include #include void main(){ double public; double a = 16; double b = 54; public = (pow(a,b)); printf(“%.21f\n”, public); } 执行代码: gcc main.c -lm 我做错了什么?

arm-none-eabi-gcc:使用printf打印浮点数

我正在为SAM3N arm cortex-M3微控制器编写一个C程序。 当我尝试打印浮点数时,它只打印’f’。 示例: printf(“%f”,43.12); 仅打印f ,而不是43.12 。 但用整数打印效果很好。 如何启用浮动的完整打印? 我知道默认情况下,编译器禁用浮动打印以减少代码大小(即看起来,它们链接了缩减版本)。 另请注意,makefile中没有使用CFLAGS=-Dprintf=iprintf 。 工具详情: ARM / GNU C编译器:(crosstool-NG 1.13.1 – Atmel build:13)4.6.1 以上工具附带Atmel studio 6.0。

printf()打印整个数组

假设我的C程序中有以下代码: #include void PrintSomeMessage( char *p ); int main(int argc, char *argv[]) { char arr[10] = “hello”; PrintSomeMessage(&arr[0]); return 0; } void PrintSomeMessage(char *p) { printf(“p: %s”,p); } 为什么输出的结果是“你好”而不是单个字符“h”? 但我明白,如果我在格式化程序中放入”%c” ,它将只打印一个字母。 但是,此地址中每个字母的内存地址都不同。 请有人向我解释一下吗?

如何在C中使用printf打印unsigned long int?

可能重复: 如何在C中打印“unsigned long”? 我有这样的号码…… int unsigned long number = 600851475143; 我试图用printf()打印它。 每次我尝试,我都会收到编译器的警告。 我已经尝试了%uld , %ld和谷歌搜索似乎没有找到答案。 我正在学习C,但以前不必使用long int ,所以我不确定我应该使用什么。 我追逐的指示符是什么?

sprintf无效格式’%d’

这有效: > sprintf(‘%d’, c(1, 1.5)) [1] “1” “1” 这不是: > sprintf(‘%d’, c(1.5, 1)) Error in sprintf(“%d”, c(1.5, 1)) : invalid format ‘%d’; use format %f, %e, %g or %a for numeric objects 为什么?

使用printf以hex格式打印字符串,结果失真

我想以hex格式打印字符串, 在机器A上,类似于 ori_mesg = gen_rdm_bytestream (1400,seed) sendto(machine B, ori_mesg, len(mesg)) 在机器B上 recvfrom(machine A, mesg) mesg_check = gen_rdm_bytestream (1400, seed) for(i=0;i<20;i++){ printf("%02x ", *(mesg+i)& 0xFF); } printf("\n"); for(i=0;i<20;i++){ printf("%02x ", *(mesg_check+i)); } printf("\n"); seed在1,2,3之间变化…. 字节生成函数是: u_char *gen_rdm_bytestream (size_t num_bytes, unsigned int seed) { u_char *stream = malloc (num_bytes+4); size_t i; u_int16_t seq = seed; seq = […]

在Windows中没有回车符(CR)的情况下将新行打印到文本文件中

我正在用C编写一个程序,它将随机的hex值打印到文本文件中。 打印值具有回车(CR)和换行(LF)。 但是,CR(在notepad ++中可见)在使用文件时会导致问题。 有没有办法打印一个只有LF和没有CR的新行。 这是代码: #include #include void main(){ int hexa_address, numberofAddress; char tracefile[50]; //name of file int seq_or_rand; //1 for random address; 2 for sequential address srand(time(NULL)); //reset the value of the random printf(“This generator generates 32bits hexadecimal.\n\n”); printf(“Name of file: “); scanf(“%s”, tracefile); printf(“Random (1) or Sequential (2): “); scanf(“%d”, &seq_or_rand); FILE […]

%n格式说明符程序在不同的编译器上给出不同的输出。 为什么?

在这个问题上,我正在阅读C中的%n格式说明符。 但是当我在不同的C ++编译器上尝试以下程序时,它给了我不同的输出。 为什么? 是什么原因? 是否存在未定义或实现定义的行为? #include int main() { int c = -1; printf(“geeks for %ngeeks “, &c); printf(“%d”, c); getchar(); return 0; } 输出: 代码块13.12 :(正确输出) geeks for geeks 10 Borland / CodeGear / Embarcadero C ++ :(正确输出) geeks for geeks 10 Orwell Dev C ++: geeks -1 Microsoft Visual Studio 2010: Debug […]

在printf参数中提升类型是危险的吗?

我的问题源于在尝试构建多个位深度平台(例如32/64)时尝试使用printf来记录事物。 一直在养成丑陋头脑的问题是尝试在多种体系结构上打印。 在32位上它会是这样的 printf(” my int: %d\n”, myInt); 但在64位上,它必须改为 print (” my int: %ld\n”, (long)myInt); 我有两个相关的问题: 我的第一个想法是,当你告诉printf打印一个变量,给它一个格式时,它会查看该变量的地址并获取该格式所需的字节数。 这一开始似乎是个大问题。 例如,如果你有一个变量myChar,它是一个char(1个字节),但是使用了%d的格式说明符,那将告诉printf转到myChar的地址并获取接下来的4个字节以将其视为int。 如果是这种情况,似乎printf会从相邻变量中获取垃圾日期(因为它抓取了4个字节,但实际值只有1个字节)。 然而,情况似乎并非如此。 通过使用myChar并指定%d,printf抓取1个字节,然后用0表示填充高3个字节。 我的理解在这里是否正确? 如果上述情况属实,那么始终将变量提升到最大值是否有任何真正的危害,以避免在32/64位情况下出现的问题类型。 例如,如果你有一个短变量myShort和一个int变量myInt,那么打印它们总是有任何缺点: printf(“myShort%ld”,(long)myShort); printf(“myInt%ld”,(long)myInt); 谢谢你的任何澄清。