Tag: 字符串格式化

printf函数如何处理%f规范?

我有几个程序,其输出我无法理解: 计划1 #include int main(void) { int i=1; float k=2; printf(“k is %f \n”,k); printf(“i is %f \n”,i); return 0; } 输出位于http://codepad.org/ZoYsP6dc k is 2.000000 i is 2.000000 计划2 再举一个例子 #include int main(void) { char i=’a’; int a=5; printf(“i is %d \n”,i); // here %d type cast char value in int printf(“a is %f \n”,a); […]

在Python与C中打印空字符(“\ x00”)

当我编写并运行语句时: print “\x00\x00\x00” 在Python中,它输出三个空格,后跟换行符。 但在C中,当我编写并运行语句时: char hex[] = “\x00\x00\x00”; printf(“%s\n”, hex); 它像我想的那样解释NULL字节:它没有做任何事情。 那么为什么在Python中将NULL字节视为空格?…

scanf(“%d”,char *) – char-as-int格式字符串?

char-as-number的格式字符串修饰符是什么? 我想使用sscanf读取一个永远不会超过255(实际上更少)的数字到一个unsigned char类型变量中。 使用典型 char source[] = “x32″; char separator; unsigned char dest; int len; len = sscanf(source,”%c%d”,&separator,&dest); // validate and proceed… 我收到了预期的警告:sscanf的参数4是char *类型,int *是预期的。 据我了解的规格,char没有修饰符(比如%sd表示简短,或%lld表示64位长) 危险吗? (溢出只会溢出(翻转)变量,还是会在分配的空间外写?) 有没有比分配临时int变量更美妙的方法? ……或者你会建议一个完全不同的方法吗?

scanf格式忽略不相关的字符

我写了一个简短的示例代码来说明我的问题 #include #include unsigned parseAndCompareDouble(const char* inSTR, const char* inF, const char * expect, const char * outF){ unsigned e = 0; char buffer[2000]; double a = 0; if( 1 != sscanf_s( inSTR, inF, &a, sizeof(double) ) ) e += 1; if( (int) strlen(expect) != sprintf_s(buffer, 2000, outF, a) ) e += 1; if( 0 […]

在c中使用scanf读取浮点数

我有一个包含浮点变量的结构, struct MyStruct{ float p; }newMyStruct; 我正在使用scanf读取一个值 int main(){ scanf(“%f”,&(newMyStruct.p)); } 问题是当我使用printf(“%f”,newMyStruct.p)打印它时printf(“%f”,newMyStruct.p)它打印’0.000000’。 另外我得到一个警告,说格式是双重的,而格式期望它是浮点数(警告scanf(“%f”,&(newMyStruct.p));语句)。当我将scanf()语法更改为scanf(“%0f”,&(newMyStruct.p)); , printf(“%0f”,newMyStruct.p); 正确打印浮点值但编译器给出了另一个警告(与精度为0的相关内容)。 printf(“%2f”,newMyStruct.p)也以其他格式打印浮点数。 所以,我的问题是我如何摆脱所有这些警告,并阅读一个适当的浮动变量,也可以正确打印。 我无法访问我通常编码的笔记本电脑,因此我无法提供正确的警告。

C中的动态浮点格式说明符

有没有办法让用户输入浮点格式说明符? 例如,如果我打印这个。 float c = 15.0123 printf(“%.2f”, c); // outputs: 15.01 如何为变量分配小数位数? 喜欢: int n = 3; float c = 15.0123 printf(“%.(%i)f”, n, c); // outputs: 15.012

在C中打印char 的一部分的最简单方法

假设我有一个char* str = “0123456789” ,我想剪切第一个和最后三个字母并打印中间,这是最简单,最安全的方法吗? 现在的诀窍:要切割的部分和要打印的部分是可变大小的,所以我可以有一个非常长的char *,或者非常小的char *。

Optimal Base-10只有itoa()函数?

在20多年的C语言编程中,我曾经使用过10次以外的基数,所以当我在另一个环境中发现我信任的MSVC的_itoa()时,我开始写一个只有10的基数,然后放入目标缓冲区参数,指向函数返回的存储,在左侧,而不是在右侧,与C标准库中的所有字符串函数一样。 我相信这段代码也是线程安全的。 有更快的方法吗? 我还要询问正确性,但我相信包含的测试代码certificate它有效,即使对于LONG_MIN的特定情况,即(-1 * LONG_MAX)-1,这导致代码失败,直到我改变了策略,注意标志,然后将signed int复制到unsigned int。 然后,我在函数中完成了无符号整数的所有核心工作 – 在75%的情况下,它也很愉快地运行。 char * _i32toa(char *const rtn, int32_t i) { if (NULL == rtn) return NULL; // declare local buffer, and write to it back-to-front char buff[12]; uint32_t ut, ui; char minus_sign=0; char *p = buff + sizeof(buff)-1; *p– = 0; // nul-terminate buffer // deal […]