标签: printf

如何使用printf和Perl的Term :: ANSIColor获得彩色输出?

有没有办法获得printf彩色输出?

#!/usr/bin/perl
use warnings; 
use strict;
use Term::ANSIColor;

printf "%4.4s\n", colored( '0123456789', 'magenta' );
Run Code Online (Sandbox Code Playgroud)

输出:(仅换行)

perl printf colors

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

sprintf函数的缓冲区溢出?

{     
    char buf[8];
    sprintf(buf,"AAAA%3s","XXXXXXXX");
    printf("%s\n",buf);
}
Run Code Online (Sandbox Code Playgroud)

会发生什么?

缓冲区有8个字符空间,只剩下3个空闲字符,但"XXXXXXXX"长度为8个字符.

我在Windows 7上使用Visual Studion 2008进行测试.结果,程序打印出来:AAAXXXXXXX,发生了运行时错误.

c printf overflow fortify-source

11
推荐指数
4
解决办法
3万
查看次数

vararg函数如何找出机器码中的参数数量?

像printf这样的可变函数如何找出它们得到的参数数量?

显然,参数的数量不会作为(隐藏)参数传递(请参阅asm示例中的printf调用).

有什么诀窍?

assembly printf variadic abi calling-convention

11
推荐指数
4
解决办法
5285
查看次数

printf with%s包含空字符

我需要连接一些字符串,我需要包含NULL字节.我不想将'\ 0'视为终止字节.我想保存我宝贵的NULL字节!

在代码示例中,如果

    char *a = "\0hey\0\0";
Run Code Online (Sandbox Code Playgroud)

我需要以输出"\ 0hey\0\0"的格式printf.

-AUstin

c string printf

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

Printf没有打印任何东西输出?C++ SDL

我试图在我的Visual C++项目中使用"printf",但它无法正常工作.使用Lazy Foo的教程,我在我的项目中设置了SDL,但是当我播放它时,printf什么都不做.

#include "SDL.h"
#include <stdio.h>

int main( int argc, char* args[] ) {
    printf("Testing");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

The program '[4664] SDL Testing.exe: Native' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)

这就是它.可能有什么不对?

c++ printf sdl visual-c++

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

如何在一定数量的小数位(没有舍入)后截断浮点数?

我试图以684.5450072点精度打印数字,因为数字被截断(不是舍入)之后684.54.

我用的时候

var = 684.545007;
printf("%.2f\n",var);
Run Code Online (Sandbox Code Playgroud)

它输出684.55,但我想得到的是684.54.

有谁知道我怎么能纠正这个?

c c++ printf

11
推荐指数
1
解决办法
3万
查看次数

C编译器如何解析以下C语句?

请考虑以下几行:

int i;
printf("%d",i);
Run Code Online (Sandbox Code Playgroud)

词法分析器会进入字符串解析%并d作为单独的标记,还是将"%d"解析为一个标记?

c compiler-construction printf lexical-analysis

11
推荐指数
3
解决办法
1886
查看次数

printf中的序列点

我在这里读到有一个序列点:

在与输入/输出转换格式说明符相关联的操作之后.例如,在表达式中printf("foo %n %d", &a, 42),%n在打印之前评估之后有一个序列点42.

但是,当我运行此代码时:

int your_function(int a, int b) {
    return a - b;
}

int main(void) {
    int i = 10;

    printf("%d - %d - %d\n", i, your_function(++i, ++i), i);
}
Run Code Online (Sandbox Code Playgroud)

而不是我期望得到的:

12 - 0 - 12

这意味着没有为转换格式说明符创建序列点.http://en.wikipedia.org是错误的,还是我只是误解了某些内容,或者在这种情况下gcc是否不合规(顺便提一下Visual Studio 2015会产生相同的意外结果)?

编辑:

我理解,参数your_function的评估顺序和分配给参数的顺序是未定义的.我不是在问我为什么我的中期是0.我在问为什么其他两个术语都是12.

c c++ printf undefined-behavior sequence-points

11
推荐指数
2
解决办法
696
查看次数

如何从C中的main函数打印argv参数?

所以我才知道我们可以在main函数中给出两个参数,即"argc"和"argv.但是我无法理解argv在这里是什么: int main(int argc, char* argv[]);

argv是一个字符数组?还是指向字符的指针数组?无论哪种方式,我正在寻找一种方法来打印出用户传递给该程序的参数.这是我写的代码,但它不是打印argv的.这有什么不对?我想这是我对argv的理解,这使得这段代码不正确.

#include<stdio.h>
int main(int argc, char *argv[])
{
    int i;
    printf("%d\n",argc);
    for(i=0;i<argc-1;i++)
    {
        printf("%s",*argv[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我从答案得到的建议后,我更正了我的代码如下.

#include<stdio.h>
int main(int argc, char *argv[])
{
    int i;
    printf("%d\n",argc);
    for(i=1;i<argc;i++)
    {
        printf("%s",argv[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在Windows 8.1上使用VMWare中的Ubuntu Linux.这是我得到的输出.它只是打印argc,之后什么都没有.有什么问题?这是我在Linux终端中编译它的方式吗?

我终端的快照

在上图中,我希望再次打印数字2,4,5,3,但它们不会被打印出来.

谢谢.

c printf parameter-passing

11
推荐指数
3
解决办法
4万
查看次数

为什么Perl与sprintf舍入不一致?

这是一个perl脚本:

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my @numbers = qw(
    0.254
    0.255
    0.256
);

foreach my $number (@numbers) {
    my $rounded = sprintf '%.2f', $number;
    say "$number => $rounded";
}

foreach my $number (@numbers) {
    $number += 100;
    my $rounded = sprintf '%.2f', $number;
    say "$number => $rounded";
}
Run Code Online (Sandbox Code Playgroud)

它输出:

0.254 => 0.25
0.255 => 0.26
0.256 => 0.26
100.254 => 100.25
100.255 => 100.25
100.256 => 100.26
Run Code Online (Sandbox Code Playgroud)

对我来说,Perl与舍入不一致是很奇怪的.我希望以.255结尾的两个数字都被舍入为.26这对于0.255是正确的,但对于数字100.255它是错误的

以下是Perl Cookbook的报价http://docstore.mik.ua/orelly/perl/cookbook/ch02_04.htm

sprintf.f格式允许您指定特定数量的小数位以将其参数舍入到.Perl查看下面的数字,如果它是5或更大,则向上舍入,否则向下舍入.

但我在http://perldoc.perl.org/functions/sprintf.html中看不到任何证据证明它是正确的

这是sprintf或Perl …

floating-point perl printf

11
推荐指数
2
解决办法
644
查看次数