标签: printf

在Perl中,如何限制小数点后的位数但没有尾随零?

这个问题类似于"从浮点数中删除尾随'.0',但对于Perl和小数点后的最大位数.

我正在寻找一种方法将数字转换为字符串格式,删除任何冗余的'0',包括不仅仅是在小数点后面.并且仍然具有最大数字数字,例如3

输入数据是浮点数.期望的输出:

0         -> 0
0.1       -> 0.1
0.11      -> 0.11
0.111     -> 0.111
0.1111111 -> 0.111
Run Code Online (Sandbox Code Playgroud)

perl printf decimal-point

5
推荐指数
2
解决办法
1万
查看次数

C++:为什么我不能用sprintf打印const char*?

我在这里错过了什么?这让我疯了!

我有一个返回const char*的函数

const char* Notation() const
{
    char s[10];
    int x=5;
    sprintf(s, "%d", x);
    return s;
}
Run Code Online (Sandbox Code Playgroud)

现在在代码的另一部分我这样做:

.....
.....
char str[50];       
sprintf(str, "%s", Notation());
.....
.....
Run Code Online (Sandbox Code Playgroud)

但是str保持不变.

如果相反,我这样做:

.....
.....
char str[50];
str[0]=0;
strcat(str, Notation());
.....
.....
Run Code Online (Sandbox Code Playgroud)

str正确设置.

我想知道为什么sprintf不能按预期工作......

c++ string printf pointers const

5
推荐指数
2
解决办法
2万
查看次数

Ruby sprintf在1.9中表现出色

我Kernel#sprintf在Ruby中的方法上遇到了一些困惑.

Ruby 1.9以与Ruby 1.8不同的方式处理编码.

以下是我追求的结果,以及它在Ruby 1.8中的表现:

>> RUBY_VERSION
=> "1.8.7"
>> sprintf("%c", 88599)
=> "\027"
Run Code Online (Sandbox Code Playgroud)

这就是它在Ruby 1.9中的表现:

1.9.3p194 :001 > RUBY_VERSION
=> "1.9.3" 
1.9.3p194 :002 > sprintf("%c", 88599)
=> "\u{15A17}"
Run Code Online (Sandbox Code Playgroud)

如果我使用魔术注释将编码设置为二进制(ascii-8bit),我会收到一个错误:

1.9.3p194 :001 > RUBY_VERSION
=> "1.9.3" 
1.9.3p194 :002 > # encoding: binary
1.9.3p194 :003 >   sprintf("%c", 88599)
RangeError: 88599 out of char range
from (irb):3:in `sprintf'
from (irb):3
from /Users/lisinge/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用Ruby 1.9.2,因此似乎没有特定于1.9.3.

也许我做错了什么?我对这种Kernel#sprintf方法并不熟悉.

我正在使用一个名为ruby-smpp的smpp库,它可以在github上找到.send_concat_mt当我试图在Ruby 1.9.3中运行它时,它就是第47行的方法.

如果你们中的任何人能够对这个问题有所了解,我将不胜感激.

ruby encoding printf

5
推荐指数
1
解决办法
380
查看次数

5
推荐指数
3
解决办法
9490
查看次数

为什么printf()是一个不纯的函数?

据我所知,不纯函数是那些在使用相同参数调用时并不总是返回相同值的函数(我必须丢失一些东西,或者可能是错误的,如果我正确的话,请纠正我).

那么为什么被printf()认为是不纯的功能呢?

c printf purely-functional

5
推荐指数
2
解决办法
1650
查看次数

尝试打印大于等于10的数字时出现STM32硬故障

临时解决方法

我使用微小的printf解决了这个问题:

可能newlib printf占用了太多内存。此后,PC会更改一些奇怪的东西,从理论上讲,这应该是数组的结尾char[100]。

cp = buf + BUF
Run Code Online (Sandbox Code Playgroud)

稍后它尝试执行

*--cp = something
Run Code Online (Sandbox Code Playgroud)

它崩溃了。内存错误?有很多我不理解的事情。例如,我不确定链接描述文件是否正确,或者syscall函数是否正确。在获得进一步的了解之前,我必须坚持使用小巧的printf。


原版的

我有一个STM32F103RB板(Nucleo),而USART1才可以工作。另外,我测试了Newlib函数,并按puts()预期工作。但是,当我尝试printf()用于整数时,如下所示:

printf("ADC: %d\r\n", test);
Run Code Online (Sandbox Code Playgroud)

如果test < 10程序正常运行,但是test >= 10产生了严重故障。经过一些GDB调试后,我发现它是从vfprintf生成的:

#0  HardFault_Handler () at main.c:136
#1  <signal handler called>
#2  0x08005af4 in _vfprintf_r (data=<optimized out>, fp=0x20000384 <impure_data+852>, fmt0=fmt0@entry=0x20004f57 " \254\264", ap=...,
    ap@entry=...) at ../../../../../../newlib/libc/stdio/vfprintf.c:1601
#3  0x08004fd0 in printf (fmt=0x800b4ac "ADC: %d\n\r") at ../../../../../../newlib/libc/stdio/printf.c:52
#4  0x080004e8 in main () at main.c:168
Run Code Online (Sandbox Code Playgroud)

我想不出任何解决方案。这是我的_sbrk():

caddr_t …
Run Code Online (Sandbox Code Playgroud)

printf arm cortex-m3 stm32 newlib

5
推荐指数
1
解决办法
4041
查看次数

为Vec <T>实现fmt :: Display

我想实现fmt::Display我的代码中常用的嵌套结构.

// The root structure
pub struct WhisperFile<'a> {
    pub path: &'a str,
    pub handle: RefCell<File>,
    pub header: Header
}

pub struct Header{
    pub metadata: metadata::Metadata,
    pub archive_infos: Vec<archive_info::ArchiveInfo>
}

pub struct Metadata {
   // SNIP
}

pub struct ArchiveInfo {
   // SNIP
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这是一个非平凡的数据树.当呈现为一行时,该archive_infos属性Header可以很长.

我想发布一些东西

WhisperFile ({PATH})
  Metadata
    ...
  ArchiveInfo (0)
    ...
  ArchiveInfo (N)
    ...
Run Code Online (Sandbox Code Playgroud)

但是当我尝试显示时,Vec<ArchiveInfo>我得到的显示没有实现.我可以实现fmt::Display,ArchiveInfo但这还不够,因为fmt::Display没有为父容器实现Vec.如果我实现FMT ::显示collections::vec::Vec<ArchiveInfo>我得到the impl does not …

printf traits rust

5
推荐指数
1
解决办法
1305
查看次数

如何阻止fprintf在Windows中与\n一起打印到文件

当我使用fprintf:

fprintf(somefile,"%c",'\n');
Run Code Online (Sandbox Code Playgroud)

它将"\ r \n"打印到文件中.我如何打印'\n'?
我正在写一个二进制文件.上面的代码仅用于调试.

c windows printf line-endings

5
推荐指数
1
解决办法
344
查看次数

使用printf作为重入函数C.

我正在处理多个进程和信号,我昨天刚刚发现printf不是一个可重入的函数,因此将信号处理程序与信号处理程序一起使用存在风险.我能做些什么吗?是否有任何可重入的printf或任何可重入的系统调用可以取代printf?

谢谢!

c printf signals

5
推荐指数
1
解决办法
659
查看次数

格式化多个百分号的字符串

我知道%%用于转义%字符串中的实际符号,因此%%%ds将以%10s下面的格式字符串结束,但我不知道为什么我需要%%5s在这个字符串中?

毕竟,只有两个额外的参数(BUFFSIZE/10).

#define BUFFSIZE 100
char buf[100]={0}
sprintf(buf, "%%5s %%%ds %%%ds", BUFFSIZE / 10, BUFFSIZE / 10);
Run Code Online (Sandbox Code Playgroud)

运行上面的代码后,buf将包含字符串,

%10s %10s 
Run Code Online (Sandbox Code Playgroud)

c printf c-strings string-formatting

5
推荐指数
1
解决办法
886
查看次数