Tag: printf

打印分配的字符串时,valgrind报告错误

代码在这里: #include #include #include int main() { char* buf = malloc(3); strcpy(buf, “hi”); printf(“%s\n”, buf); free(buf); } 它编译为: gcc ac && valgrind ./a.out 错误消息在这里: ==1421== Memcheck, a memory error detector ==1421== Copyright (C) 2002-2010, and GNU GPL’d, by Julian Seward et al. ==1421== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info ==1421== Command: […]

printf()导致乱码

我有这个代码: unsigned char *command = “0000”; unsigned char foo = (hex_char_to_int(command[0]) << 4) | hex_char_to_int(command[1]); unsigned char bar = (hex_char_to_int(command[2]) << 4) | hex_char_to_int(command[3]); printf("foo: %02x, bar: %02x\r\n", foo, bar); 它使用此function: unsigned char hex_char_to_int(unsigned char ch) { switch (ch){ case ‘0’: return 0; case ‘1’: return 1; case ‘2’: return 2; case ‘3’: return 3; […]

在printf中格式化字符串攻击

#include int main() { char s[200] int a=123; int b=&a; scanf(“%50s”,s); printf(s); if (a==31337) func(); } 目的是执行格式字符串攻击 – 通过输入字符串来执行func()。 我试图用%n覆盖变量,但我得出的结论是,如果不首先显示b变量是不可能的,我不知道如何。 任何提示将不胜感激。 对不起,我的英语不好。

_vscprintf相当于Android?

_vscprintf在Android上不可用。 另外vsprintf(NULL, fmt, ap)不起作用(产生seg错误),所以似乎无法计算vsnprintf成功所需的缓冲区大小? Android 源代码表明__android_log_print函数只是使用vsnprintf将字符串截断为1024 … 你如何处理这种情况?

预测sprintf()’ed line的len?

我可以用某个函数来预测sprintf()需要的空间吗? IOW,我可以调用一个函数size_t predict_space(“%s \ n”,some_string)来返回由sprintf(“%s \ n”,some_string)产生的C字符串的长度吗?

签署NaN值

基于“IEEE”规范:“当输入或结果是NaN时,该标准不解释NaN的符号。” 然而, printf NaN值打印为signed: nan或-nan有人和我打开-nan有人能指出规则集(来自规范吗?)例如,我检查了printf(-1.0f)打印-nan谢谢您

在延迟之前的printf在C中不起作用

有谁知道为什么如果我在延迟之前放一个printf,它等到延迟完成才会打印出消息? Code1 with sleep(): int main (void) { printf (“hi world”); system(“sleep 3”); } 具有自实现延迟的Code2: void delay(float sec) { time_t start; time_t current; time(&start); do{ time(&current); }while(difftime(current,start) < sec); } int main (void) { printf ("hi world"); delay(3); } 而如果: printf (“hi world”); delay(3); printf (“hi world”); delay(3); 它一直等到睡眠总和,然后它同时打印消息 为什么会这样? 更新:当我呼叫延迟时,我写了延迟(“睡眠3”),我的意思是延迟(3)。 更正

什么是c printf%f默认精度?

我很好奇: 如果你做printf(“%f”, number); 声明的精确度是多少? 即会出现多少小数位? 这个编译器是否依赖?

使用fscanf逐行遍历FILE

好的,我有一个文本文件database.txt。 每行都是具有以下格式的用户 “John Smith”| 4| 80.00| “123 Lollipop Lane”| “New Jersey”| “08080” 当我尝试执行以下操作时: database = fopen(fileName,”r”); while(fscanf(database,”%[^\n]”, buffer) != EOF){ printf(“ATTEMPT TO: Insert user %s\n\n”, buffer); if (insert_Customer(clients, create_Customer(buffer)) < 0){ printf("\nERROR: Failed to insert and create customer %s\n", buffer); } else printf("\nSUCCESS: Inserted Customer %s\n\n", buffer); } 它在第一行运行正常,将ENTIRE行发送到create_Customer(char * buffer)函数。 出于某种原因,我不明白,在第一行后,它不断尝试发送“John Smith”,而不是继续前进到下一行。 我相信我的格式不正确,但我无法弄清楚如何完成我想要完成的工作,这是逐行读取此文件并将每行传递到create_Customer函数。

如何迭代unicode字符并用C中的printf在屏幕上打印?

我想迭代所有(至少16位)unicode字符并用C在屏幕上打印它们。 我知道有关于SO的相关问题,但它们没有解决C中printf的问题,但这是我想要实现的,如果它可能毕竟是可能的。 我认为应该可能有一个我不知道的技巧。 既然我想使用printf,我想到了这样的事情: for (int i = 0x0000; i <= 0xffff; i++) { //then somehow increment the string char str[] = "\u25A1\n"; printf("%s", str); char str[] = "\u25A2\n"; printf("%s", str); char str[] = "\u25A3\n"; printf("%s", str); … } 但是增加unicode代码点有点问题,在这里\u25A1 。 我知道它本身是不可能的,因为像\u0000这样的字符是不可打印的,编译器说不。 但除此之外,我怎么能从hex0000增加到ffff并用printf打印字符。