Tag: printf

* p ++和++ * p之间的区别

int a = 5; int *p = &a; printf(“%d\n\n”, ++*p); printf(“%d\n”, *p++); ++*p相当于++(*p) 。 但*p++增加指针,而不是*p++指向的值。 但我无法理解为什么我的代码中的printf语句显示相同的值“6”。 这背后有什么具体的逻辑吗?

使用printf格式在C中打印等宽列

我想在C中使用printf打印列。我写了这段代码: #include 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; } 它有效,但我有这样的输出: TXT1: a TXT2 bbbbbbbeeeeebbbbb TXT3 e TXT1: aaaaaaaa TXT2 bbbbbbbbbbbb TXT3 abcde 所以列不是等宽的。 基本上,我想这样做,无论我的论证中的文本有多长,我的函数总是打印出一个很好的格式化列。 问题是:我该怎么做? saing nice我的意思是无论文本传递给我的打印function多长时间,它总是打印出等宽列,例如: 我的输出看起来像这样: a cd` fg ij a cd fg ij […]

C – 将输出写入文件

EDIT: void print(const int *v, const int size) { FILE *fpIn; fpIn = fopen(“char-array.txt”, “a”); int i; if (v != 0) { for (i = 0; i < size; i++) { printf("%d", (int)v[i]); fprintf(fpIn, "%d\n", (int)v[i]); } perm_count++; printf("\n"); } fclose(fpIn); } 我想这是一个相对简单的问题:) 基本上该程序使用置换算法,并将输出打印到控制台中的标准输出。 我还想通过fprintf将内容写入文件。 虽然我似乎无法让它工作。 它只是将垃圾字符打印到文本文件的第一行,仅此而已! 我将粘贴下面的代码,非常感谢帮助! 在print函数中可以找到写入文件代码。 谢谢, T. #include #include #include #include […]

什么时候printf(“%s”,char *)停止打印?

在我的课上,我们正在编写自己的C的malloc()函数副本。 为了测试我的代码(当前可以分配空间很好)我正在使用: char* ptr = my_malloc(6*sizeof(char)); memcpy(ptr, “Hello\n”, 6*sizeof(char)); printf(“%s”, ptr); 输出通常是这样的: Hello Unprintable character 有些调试认为我的代码本身并没有造成这种情况,因为ptr的内存如下: [24个字节的元信息] [请求的字节数] [填充] 所以我认为printf正在进入填充区,这只是垃圾。 所以我运行了一个测试: printf(“%s”, “test\nd”); 得到了: test d 这让我想知道,当DOES printf(“%s”,char *)停止打印字符时?

在C中读取和打印.txt文件行的最清晰方法

有很多方法描述如何使用各种方法在此站点上打印文本文件的行: Posix风格 , 读取IP地址 , 固定线长 。 它们似乎都是根据具体的例子量身定做的。 如果能够使用最清晰 , 最简洁和最简单的方法,那就太棒了: 将任何文本文件的每一行打印到屏幕上。 优选地详细说明每条线的作用。 简洁明了的要点。

如何打印像ino_t这样的未知大小的类型?

我经常遇到这样的情况:我想用printf打印整数类型的实现定义大小的值(比如ino_t或time_t )。 现在,我使用这样的模式: #include ino_t ino; /* variable of unknown size */ printf(“%” PRIuMAX, (uintmax_t)ino); 这种方法到目前为止有效,但它有一些缺点: 我必须知道我正在尝试打印的类型是签名还是未签名。 我必须使用可能会扩大我的代码的类型转换。 有更好的策略吗?

snprintf()使用newlib nano打印垃圾浮动

我正在运行带有ARM Cortex-M3(STM32F205)的裸机嵌入式系统。 当我尝试使用带浮点数的snprintf()时,例如: float f; f = 1.23; snprintf(s, 20, “%5.2f”, f); 我把垃圾变成了垃圾。 格式似乎很荣幸,即垃圾是一个格式良好的字符串,包含数字,小数点和两个尾随数字。 但是,如果我重复snprintf ,字符串可能会在两次调用之间发生变化。 浮点数学似乎在其他方面起作用,而snprintf与整数一起工作,例如: snprintf(s, 20, “%10d”, 1234567); 我将newlib-nano实现与-u _printf_float链接器开关一起使用。 编译器是arm-none-eabi-gcc 。 我确实怀疑内存分配问题,因为整数打印没有任何打嗝,但浮动表现就好像它们在过程中被破坏一样。 printf系列函数使用浮点数调用malloc ,而不是整数。 我在这个上下文中使用的唯一不属于newlib的代码是我的_sbrk() ,它是malloc所必需的。 caddr_t _sbrk(int incr) { extern char _Heap_Begin; // Defined by the linker. extern char _Heap_Limit; // Defined by the linker. static char* current_heap_end; char* current_block_address; […]

为什么getchar()在printf语句后读取’\ n’?

我提示用户输入数组的长度,使用此输入初始化char []数组,然后提示用户输入要输入char []数组的消息。 我正在使用getchar()读取用户消息的第一个字符。 但是, getchar()在读取任何用户输入之前正在读取换行符’\n’ 。 它似乎是从前一个提示用户的printf语句中获得’\n’ … 这是相关的代码: #include int main(void) { int len = 0, originalLen = 0; printf(“\n\nWhat is the length of the array? “); scanf(“%d”, &originalLen); char str[originalLen]; // intitializing the array printf(“Enter a message to enter into the array: “); char target = getchar(); str[len] = target; // why […]

在C中打印“(双引号)”

我正在编写一个C代码,它从文件中读取并生成一个中间.c文件。 为此,我使用fprintf()打印到该中间文件。 我怎么打印” ?

printf()使用字符串表“解码器环”调试库

我写信是为了看看你们中是否有人见过或听说过我将要描述的想法的实现。 我有兴趣为嵌入式目标开发一个printf样式的调试库。 目标是非常远程的,我和目标之间的通信带宽预算非常紧张,所以我希望能够以非常有效的格式获得调试消息。 通常,调试语句类似于以下内容: myDebugLibraryPrintf(“Inside loop, processing item %d out of %d.\n”, i, numItems); 当然,当它被扩展为文本时,打印的字符串类似于“内部循环,处理项目5中的10个\ n”,总共约42个字节左右。 此语句打印出的90%以上的数据是静态的,字面的 – 在编译时已知。 当然,在编译时只知道“5”和“10”。 我想做的是只能回发那两个整数(8个字节而不是42个)。 一旦我收到了这些数据,我就会有一些“解码器响铃”让我“重新构建”收到的数据并在我的位置打印出完整的调试信息。 我会自动生成“解码器环”(作为构建过程的一部分),在编译时为每个myDebugLibraryPrintf()语句提供一个唯一的ID,并生成一个将这些唯一ID映射到原始格式字符串的表。 然后,只要在目标上调用myDebugLibraryPrintf(),它就会传输唯一ID以及格式字符串中看到的任何”%d” , “%f”等varargs值,但格式字符串本身不会被传输。 (我现在可能只是禁止”%s”项目…)回到我的位置,我们将有一个程序查找表中的唯一ID,找到相应的格式字符串,并用它来重建原始调试消息。 我觉得以前有人可能有过这个想法,我想社区中的某个人可能会看到类似的东西(或者甚至知道这样做的开源库)。 约束: 为了澄清,我在这里处理C / C ++,我对printf()的100%完全替换实现不感兴趣 – 例如非文字格式字符串, %s (字符串)格式说明符,或者更高级的格式说明符,例如将宽度或精度放在带有%*.*d的varargs列表中,不需要支持。 我希望字符串表作为构建过程的一部分自动生成,因此添加调试不会比添加传统的printf()更多的工作。 如果需要超过最小努力量,我项目中的任何人都不会使用它。 在生成字符串表的构建过程中做额外的工作几乎是假定的。 幸运的是,我控制了我对使用这个库感兴趣的所有源代码,并且我在构建过程中有很多灵活性。 谢谢!