Tag: printf

Printf:Java和C实现的差异

我今天注意到我不能使用*将宽度或精度参数传递给Java的printf实现。 也就是说, printf的以下参数在C中有效,但不是Java: “%*d”, 10, 3 “%-*d”, 10, 3 “%0*d”, 10, 3 “%*.5f”, 11, 1.0/9 “%-11.*f”, 5, 1.0/9 “%0*.*f”, 11, 5, 1.0/9 我应该注意哪些其他实现差异?

SPARC程序集参数中的printf格式说明符?

如何使用SPARC程序集获得相当于此C的内容: printf( “Hello, my name is %s.\n”, name ); 使用函数原型: void printName( const char* msg, const char* name ) 其中msg是“你好,我的名字是%s。\ n”。 我知道我可以使用.asciz在数据段中定义“Hello,my name is%s。\ n”而没有第一个参数msg,但有没有办法将字符串传递给一个具有%的汇编函数它的标识符? char *甚至可以采用格式标识符吗? 我尝试了以下但是我获得了核心转储。 C中的函数调用: char * msg = “Hello, my name is %s.\n”; char * name = “Foo”; printName( msg, name ); 部件: mov %i0, %o0 mov %i1, %o1 call […]

使用stdint.h和ANSI printf?

我正在写一个bignum库,我想使用高效的数据类型来表示数字。 特别是数字的整数,以及加法和乘法时中间表示的长(如果严格地说是整数的两倍)。 我将使用一些C99function,但试图符合ANSI C. 目前我的bignum图书馆中有以下内容: #include #if defined(__LP64__) || defined(__amd64) || defined(__x86_64) || defined(__amd64__) || defined(__amd64__) || defined(_LP64) typedef uint64_t u_w; typedef uint32_t u_hw; #define BIGNUM_DIGITS 2048 #define U_HW_BITS 16 #define U_W_BITS 32 #define U_HW_MAX UINT32_MAX #define U_HW_MIN UINT32_MIN #define U_W_MAX UINT64_MAX #define U_W_MIN UINT64_MIN #else typedef uint32_t u_w; typedef uint16_t u_hw; #define BIGNUM_DIGITS 4096 […]

将换行符添加到printf()等效于刷新流吗?

以下程序显示当发生“除以零”之类的错误时,缓冲的I / O如何导致程序出现问题: int main() { int a = 1, b = 0, c; printf(“Dividing…”); c = a/b; printf(“Answer is: %d\n”, c); return 0; } 输出是Floating point exception (core dumped) 。 很公平。 但令人惊讶的是,如果我将第一个printf更改为printf(“Dividing…\n”); ,这个文本实际上是在程序崩溃之前打印的(顺便说一下,我在Linux上运行GCC)。 我是否可以得出结论,添加换行符相当于刷新? 如果是这样,如果我的所有printf()字符串都以\n结尾,我实际上是在剥夺自己缓冲I / O的好处?

C ++:将类传递给vararg函数

我正在尝试创建一个类似于MS CString的类(也就是说,它将它传递给printf,它就像一个指向C字符串的指针,没有像“.c_str()”这样的额外丑陋的黑魔法。 这是这个类的第一个实现,只是工作,并没有提供任何有用的东西: #include #include class CString { protected: struct CStringInfo { size_t Length; size_t MaxLength; }; public: CString() { Buffer = NULL; Assign(NULL); } CString(const char* chv) { Buffer = NULL; Assign(chv, 0); } ~CString() { if(Buffer) delete[] Buffer; Buffer = NULL; } size_t GetLength() { if(!Buffer) Alloc(1); return GetInfo()->Length; } size_t Resize(size_t size) […]

Clang 5.0上的vsprintf和vsnprintf 警告

我有这一大块代码 static void err_doit(int errnoflag, int level, const char *fmt, va_list ap) { int errno_save; unsigned long n; char buf[MAXLINE]; errno_save = errno; #ifdef HAVE_VSNPRINTF vsnprintf(buf, sizeof(buf), fmt, ap); /* this is safe */ #else vsprintf(buf ,fmt, ap); /* this is not safe */ #endif n = strlen(buf); if (errnoflag) snprintf(buf + n, sizeof(buf) – […]

安全处理字符串变量

你好,我对C很陌生,简而言之,我在课堂作业中做了以下工作: foo (char *var) { printf(var); } 我被告知这是不好的做法和不安全但我的导师没有得到关于此的详细信息。 我假设如果var的字符串值可由用户控制,它可能用于执行缓冲区溢出? 我如何正确强化此代码? 我是否必须限制str长度? 干杯谢谢!

初学者C – 以相反的顺序打印用户的浮动输入

我正在编写一个程序,它使用1个语句来读取用户的6个浮点数。 然后让它打印3行中的6个数字,满足以下所有要求: (1)数字按照读入的相反顺序打印 (2)它们在3行上:第一行有1个数字,下一行有2个数字,最后一行有3个数字 (3)将数字对齐,使它们采用列格式,右对齐,小数点后1位 这是我对前两个要求的尝试 #include int main(void) { //variable definitions float f1,f2,f3,f4,f5,f6; printf (“Enter 6 float numbers, separated by commas: “); scanf (“%f1,%f2,%f3,%f4,%f5,%f6”,&f1,&f2,&f3,&f4,&f5,&f6); printf (“%f6\n”,f6); printf (“%f5,%f4\n”,f5,f4); printf (“%f3,%f2,%f1\n”,f3,f2,f1); return 0; } 对于我的初学者来说,它非常有意义。 这是我运行时的结果 输入6个浮点数,用逗号分隔:0.2,3.2,0.1,0.5,0.6,0.7 数字是: -107374176.0000006 -107374176.0000005,-107374176.0000004 -107374176.0000003,-107374176.0000002,0.2000001 按任意键继续 。 。 。 所有这些都是垃圾输出,除了最后一个。 感谢所有的帮助!

我什么时候可以逃脱未通过签名声明int?

在C中,应该使用关键字signed来声明像-1这样的有符号整数,如下所示: signed int i = -1; 但是,我试过这个: signed int i = -2; unsigned int i = -2; int i = -2; 所有3个案例用printf(“%d”, i);打印出-2 printf(“%d”, i); 。 为什么?

printf转换麻烦很久

我一直在研究项目的euler问题,它本质上强迫你使用大存储的数据类型。 #include #include #define num 600851475143 int main() { long long i, j, count=0, number=num, k; for(i=2;number!=1;i++) { count=0; for(j=1;j<=i;j++) { if((i%j)==0) { count++; } } for(k=0;k<100000000;k++) {} if(count==2) { printf(" %d\n", i); if(number%i==0) { number/=i; printf(" %d\n", number); printf("%d\n", i); i=2; } } } getch(); return 0; } 当我编译并运行程序时,没有打印数字。 我尝试了各种printf转换%ll,%l,我已经更改了数据类型。 我正在使用GNU GCC编译器。 我该怎么办?