标签: printf

C删除printf输出

我想创建一个小函数,它应该在控制台中以百分比显示当前状态.该函数应仅显示行中的当前值.所以我必须删除最后一个输出.那可能吗?最好的情况是一些ANSI C的东西,该程序应该适用于Linux和Windows.

我找到了一些类似的转义序列"\033[J",但它不起作用.

编辑

好吧,我尝试过:

void PrintProcessBar(int i, int n) {
    float ratio = i / (float)n;    
    printf("%.3d\b\b", (int)(ratio * 100));
    fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)

但它只打印了很多零...出了什么问题?如果我用三个,\b我什么也得不到.

解

float ratio = (i / (float)n) * 100;
printf("\b\b\b\b");
fflush(stdout);
printf("%.3d%c", (int)ratio, 37);        
fflush(stdout);
Run Code Online (Sandbox Code Playgroud)

i =当前位置.n =最大运行.

我使用4 \b因为,在第一次调用函数时它将删除4个空格.

格尔茨.

c console printf

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

如何在C++中用fprintf编写UTF-8文件

我正在使用VisualStudio和MFC在C++中编程(只是偶尔).我用fopen和fprintf写了一个文件.该文件应以UTF8编码.有没有可能这样做?无论我尝试什么,该文件都是双字节unicode或ISO-8859-2(latin2)编码.

Glanebridge

c++ printf mfc fopen utf-8

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

在F#中,你如何理解ParamArray函数(如sprintf)?

在F#中,你如何理解接受可变数量参数的函数?

我有这样的代码...(日志功能只是一个例子,确切的实现并不重要)

let log (msg : string) =
    printfn "%s" msg

log "Sample"
Run Code Online (Sandbox Code Playgroud)

它使用sprintf格式化的字符串在整个代码中调用,例如.

log (sprintf "Test %s took %d seconds" "foo" 2.345)
Run Code Online (Sandbox Code Playgroud)

我想在日志函数中讨论sprintf功能,看起来像......

logger "Test %s took %d seconds" "foo" 2.345
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西

let logger fmt ([<ParamArray>] args) =
    log (sprintf fmt args)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将ParamArray参数传递给sprintf调用.

这是如何在F#中完成的?

printf f# currying paramarray

6
推荐指数
2
解决办法
1298
查看次数

想要printf的解决方案

可能重复:
如何printf uint64_t?

我想u_int64_t用C 打印.我想知道格式说明符吗?我是C用户,我想做一个printf().

c compiler-construction printf format-specifiers

6
推荐指数
1
解决办法
6070
查看次数

从64位asm调用Printf时,params如何通过?

我正在学习再次使用汇编语言,到目前为止我遇到的唯一问题就是调用C语言.我所拥有的书是32位,而我的工作是64位.显然,调用约定存在很大差异,并且http://www.x86-64.org/documentation站点已关闭.因此,经过一些挖掘/测试,在C中编译虚拟程序并花费3天时间,我想我会发布我的发现,如果它可以帮助其他人.

RAX是否需要给出浮点数?堆栈填充"阴影空间"16或32位?这个宏用于对齐小程序的堆栈是否可以通过?我知道你可以用对齐NOP填充代码,我不确定堆栈框架.

; pf.asm compiled with 'nasm -o pf.o -f elf64 -g -F stabs'
; linked with 'gcc -o pf pf.o'
; 64-bit Bodhi (ubuntu) linux

%include "amd64_abi.mac"
[SECTION .data]
First_string:   db "First string.",10,"%s", "%d is an integer. So is %d",10
                db "Floats XMM0:%5.7f  XMM1:%.6le  XMM2:%lg",10,0  
Second_String:  db "This is the second string... %s's are not interpreted here.",10
                db " Neither are %d's nor %f's. 'Cause it is a passed value.", 10, 0
; Just a regular string …
Run Code Online (Sandbox Code Playgroud)

assembly printf x86-64 abi calling-convention

6
推荐指数
1
解决办法
5268
查看次数

格式字符串攻击?

最近的安全通知(http://osdir.com/ml/bugtraq.security/2015-04/msg00102.html)声明这行代码:

fprintf(stderr, (isprint(adata->contents[i])) ? "%c " : "%02x", adata->contents[i]);
Run Code Online (Sandbox Code Playgroud)

受到" 格式字符串攻击 "的影响我理解为使用类似的东西:

fprintf(stderr, varWithUserSuppliedData);
Run Code Online (Sandbox Code Playgroud)

代替:

fprintf(stderr, "%s", varWithUserSuppliedData);
Run Code Online (Sandbox Code Playgroud)

但是我没有在第一次fprintf电话中看到这一点 - 我错过了什么?

c security printf

6
推荐指数
1
解决办法
308
查看次数

如何将BSTR传递给printf?

我有一个使用VS2013的非unicode(MBCS)C++项目构建.

给定一个BSTR值,我应该如何安全地将它传递给printf?

c++ printf bstr

6
推荐指数
2
解决办法
7819
查看次数

为什么printf("%c",1)返回笑脸而不是编码char为1

这是我的代码

#include <stdio.h>

int x,y;

int main( void )
{
    for ( x = 0; x < 10; x++, printf( "\n" ) )
        for ( y = 0; y < 10; y++ )
            printf( "%c", 1 );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它会回归笑脸.我到处搜索笑脸的代码或1的代码但我没有设法找到任何链接或任何解释为什么1的char值返回笑脸,当1的ascii代码是SOH时.我研究了这个问题的答案,但我没有找到解释为什么会发生这种情况的答案.

c terminal printf character character-encoding

6
推荐指数
2
解决办法
1487
查看次数

用printf打印出unicode字符

我试图?通过将相应的十进制值传递给printf 来打印出来.输出什么都没有.为什么我的代码不起作用?

#include <stdio.h>
int main()
{
    printf("%lc",536);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c unicode printf

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

字符串和结构的奇怪行为

我一直遇到下面的代码问题,我想了解为什么它不起作用.当我直接在结构中使用一个从函数返回的字符串时,我得到了一个奇怪的行为.

第一个printf没有问题,与第二个和第三个相同,但由于某种原因,最后一个进入分段错误或只打印一个随机字符串.如果我尝试在结构中使用字符指针而不是数组,则问题不会出现.

#include <stdio.h>

typedef struct
{
    int value;
    char string[23];
} Test;

Test func()
{
    Test nuovo = {5, "test"};
    return nuovo;
}

int main()
{
    Test test = func();
    printf("\n1: %d", func().value);

    printf("\n2: %s", test.string);

    printf("\n3: %s", &(func().string[0]));

    printf("\n0: %s", func().string);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

====================[ Build | test | Debug ]====================================
"C:\Program Files\JetBrains\CLion 2018.2.6\bin\cmake\win\bin\cmake.exe" --build C:\Users\rober\CLionProjects\test\cmake-build-debug --target test -- -j 4
"C:\Program Files\JetBrains\CLion 2018.2.6\bin\cmake\win\bin\cmake.exe" -SC:\Users\rober\CLionProjects\test -BC:\Users\rober\CLionProjects\test\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 test
mingw32-make.exe[1]: Entering directory 'C:/Users/rober/CLionProjects/test/cmake-build-debug' …
Run Code Online (Sandbox Code Playgroud)

c string printf struct

6
推荐指数
1
解决办法
98
查看次数