自从我上次使用D编程语言以来已经有一段时间了,现在我将它用于一些涉及科学计算的项目.
我有一堆浮点数据,但是当我使用它打印时writefln,我得到的结果如下:4.62593E-172这是零!如何使用字符串格式化%stuff来打印0这样的东西?
现在我正在使用黑客:
if( abs(a) < 0.0000001 )
writefln(0);
else
writefln(a);
Run Code Online (Sandbox Code Playgroud)
它完成了这项工作,但我希望使用格式化操作,如果可能的话.
UPDATE
有人建议,writefln("%.3f", a)但它的问题是它打印不必要的额外零,即0成为0.000和1.2变成1.200
我可以使它也删除尾随零?
编译这一行
long int sz;
char tmpret[128];
//take substring of c, translate in c string, convert to int,
//and multiply with 1024
sz=atoi(c.substr(0,pos).c_str())*1024;
snprintf(tmpret,128,"%l",sz);
Run Code Online (Sandbox Code Playgroud)
我在snprintf上读了两个警告:
warning: conversion lacks type at end of format
warning: too many arguments for format
Run Code Online (Sandbox Code Playgroud)
为什么?指定了类型(long int sz和snprintf中的%l),snprintf中的参数只有一个.有谁能够帮我?谢谢.
我正在为浮点异常的信号处理程序中调试一些Linux C代码.目标是检查浮点寄存器,打印一些信息,然后中止.尝试printf结果时出现分段错误(char)('0' + phyreg).
struct ucontext * uc = (struct ucontext *) data;
fpregset_t fp = uc -> uc_mcontext.fpregs;
int top = (fp -> sw >> 11) & 0x07;
int i,j,k;
for (i = 0; i < 8; i++) {
static const char * tags [] = {
"valid", "zero", "invalid/infin", "empty"
};
int phyreg = (top + i) & 0x07;
struct _libc_fpreg* r = &(fp -> _st [phyreg]);
const char* regExp = (((r->exponent & 0x8000) != 0) …Run Code Online (Sandbox Code Playgroud) 我认为这是使用sprintf的常用方法:
char pText[x];
sprintf(pText, "helloworld %d", Count );
Run Code Online (Sandbox Code Playgroud)
但是,如果char指针分配的内存少于打印到的内容,究竟会发生什么?
即如果x小于sprintf的第二个参数的长度怎么办?
我问,因为我在sprintf语句后面的代码中得到了一些奇怪的行为.
我的问题是fprintf只是将预期输出的一部分打印到文件中.当我使用printf时,输出正确地打印在输出窗口上,显示循环是正确的但是当我使用它与fprintf时,不打印完整的输出.仅打印初始部分.
请问可能出现什么问题?
提前致谢...
我正在尝试格式化一个字符串,为一个数字提供2个字符,无论它的值是什么.现在,我有
[NSString stringWithFormat:@"%2d:%2d:%2d",h,m,s)];
Run Code Online (Sandbox Code Playgroud)
对于值1,2,3,输出为
1: 2: 3
Run Code Online (Sandbox Code Playgroud)
如何将空格更改为0?
我在以下代码上遇到编译错误:
printf((char*)buffer);
以及我得到的错误消息是:
cc1:格式不是字符串文字,没有格式参数...
我怀疑有些库我忘了安装,因为我能够在其他机器上编译并运行代码而没有错误...
PS:问题随着我能够在其他机器上运行相同的代码而增加...我怀疑gcc版本的差异可能会导致这样的问题?
我最近浪费了大约半个小时来追踪NSLog(...)中的奇怪行为:
NSString *text = @"abc";
long long num = 123;
NSLog(@"num=%lld, text=%@",num,text); //(A)
NSLog(@"num=%d, text=%@",num,text); //(B)
Run Code Online (Sandbox Code Playgroud)
行(A)打印预期的"num = 123,text = abc",但行(B)打印"num = 123,text = (null) ".
显然,打印long longwith %d是一个错误,但有人可以解释为什么它会导致text打印为null?
我无法理解该程序的输出(使用gcc).
main()
{
int a=10;
printf("%d %d %d\n",++a, a++,a);
}
Run Code Online (Sandbox Code Playgroud)
输出:
12 10 12
Run Code Online (Sandbox Code Playgroud)
另外,请解释评论的顺序printf().
如何在不包含stdio.h的情况下直接调用"printf"?
我在这里找到了一个有趣的教程:http:
//www.halcode.com/archives/2008/05/11/hello-world-c-and-gnu-as/
所以,这是我的尝试:
int main(){
char ss[] = "hello";
asm (
"pushl %ebp ;"
"movl %esp, %ebp ;"
"subl $4, %esp ;"
"movl $ss, (%esp) ;"
"call _printf ;"
"movl $0, %eax ;"
"leave ;"
"ret ;"
);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用MinGW 4.4,这是我如何编译它:
gcc -c hello.c -o hello.o
ld hello.o -o hello.exe C:/mingw/lib/crt2.o C:/mingw/lib/gcc/mingw32/4.4.0/crtbegin.o C: /mingw/lib/gcc/mingw32/4.4.0/crtend.o -LC:/mingw/lib/gcc/mingw32/4.4.0 -LC:/ mingw/lib -lmingw32 -lgcc -lmsvcrt -lkernel32
不幸的是,它失败了:
hello.o:hello.c :(.text + 0x26):对`ss'的未定义引用
如何解决这个问题?