标签: printf

如何获得printf样式的编译时警告或错误

我想写一个像printf这样的例程,而不是功能上的,但是我希望例程能够像printf一样编译检查特性.

例如,如果我有:

{
   int i;
   std::string s;
   printf("%d %d",i);
   printf("%d",s.c_str());
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨如下:

1 cc1plus: warnings being treated as errors
2 In function 'int main()':
3 Line 8: warning: too few arguments for format
4 Line 9: warning: format '%d' expects type 'int', but argument 2 has type 'const char*'
Run Code Online (Sandbox Code Playgroud)

代码示例

printf和co是编译器对待的特殊函数,还是有一些技巧可以让它在任何用户定义的函数上工作?我感兴趣的具体编译器是gcc和msvc

c++ compiler-construction printf typechecking

12
推荐指数
2
解决办法
5678
查看次数

AIX上的asprintf的替代或解决方法

我正在尝试在AIX上构建python-kerberos.kerberospw.c使用了对asprintf的调用,但是从谷歌告诉我的是,asprintf在AIX上不存在.

我看到http://www.koders.com/c/fidAA9B130D588302673A28B568430A83131B7734C0.aspx?s=windows.h,它看起来像我可以创建一个替身asprintf,但我不知道这个会去或我会怎样#include它在kerberospw.c中.

有没有办法可以使用koders.com示例或其他一些代码"伪造"asprintf?我可以只包含asprintf函数,如kerberospw.c所示?我不是C编码员,但是

asprintf(char**resultp,const char*format,...)

用最后的圆点看起来对我来说不是一个有效的签名.kerberospw.c的相关部分如下

asprintf(消息"%*S:%*S",(int)的result_code_string.length,
(字符*)result_code_string.data,
(INT)result_string.length,
(字符*)result_string.data);

我知道我可以联系上python-的Kerberos的作者,但)我认为这将是有帮助的潜在的补丁,如果我这样做,和b)有可能是其他的软件我碰到运行使用asprintf,这将是很高兴有一个解决方法.

c aix printf asprintf

12
推荐指数
2
解决办法
2816
查看次数

带有命名参数的vsprintf或sprintf,或PHP中的简单模板解析

我正在寻找一种方法来为或使用命名参数.sprintfprintf

例:

sprintf(
  'Last time logged in was %hours hours, 
   %minutes minutes, %seconds seconds ago'
  ,$hours,$minutes, $seconds
);
Run Code Online (Sandbox Code Playgroud)

或通过vsprintf和一个关联数组.

我在这里找到了一些编码示例

function sprintfn ($format, array $args = array())
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/de/function.sprintf.php

和这里

function vnsprintf( $format, array $data)
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/de/function.vsprintf.php

人们写自己的解决方案.

但我的问题是,是否有可能有一个标准的PHP解决方案来实现这一点,还是有另一种方式,也许是由PEAR提供的简单的PHP模板,我可以通过坚持标准的PHP实现这一点?

谢谢你的帮助.

php string.format printf templates named-parameters

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

使用printf的Linux的gotoxy()实现

我正在为gcc编译器寻找gotoxy()的替代品并找到了 -

void gotoxy(int x,int y)
{
    printf("%c[%d;%df",0x1B,y,x);
}
Run Code Online (Sandbox Code Playgroud)

我想知道它是如何运作的,我的意思是我们什么时候使用[和;在printf内部,0x1B在那里做什么以及如何将光标带到这个代码的行/列?

我从来没有在书中看到过这种类型的printf练习,所以它会很棒如果你能指出我可以找到关于printf的这种用途的链接.

c printf

12
推荐指数
1
解决办法
7950
查看次数

在C中printf背后的是什么?

可能重复:
了解printf的硬件

我不是在寻找printf功能的实现,但我想知道,当printf用C 调用时会发生什么?所有活动都在软件和硬件级别进行.

这就是我认为PrintfCAll - > KernelModeOn - > SystemCallMade - >数据放在一些排序的输出缓冲区 - >输出被转储到某些控制器的缓冲区 - >控制器将其转储到监视器 - >中断CPU说工作已完成.

我有多正确?谢谢.

编辑:Unix可以作为一个平台.说ubuntu.有人可以告诉我,数据从何处流出,是否还有监视器的控制器?上面提到的时间表在多大程度上是正确的?

c printf operating-system

12
推荐指数
1
解决办法
9851
查看次数

如何防止打印功能?

是否可以使功能静音?例如:

#include <stdio.h>
int function(){
  printf("BLAH!");
  return 10;

}
int main(){
  printf("%d", silence( function()) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)

而不是:

BLAH!
10
Run Code Online (Sandbox Code Playgroud)

我会得到:

10
Run Code Online (Sandbox Code Playgroud)

可能吗?如果积极怎么办呢?

c printf gcc

12
推荐指数
4
解决办法
2614
查看次数

程序出口处的printf flush

我很想知道printf()当程序退出时函数的flush 如何工作.

我们来看下面的代码:

int main(int ac, char **av)
{
    printf("Hi");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何printf()管理将其缓冲区刷新到stdout?

我想这是平台依赖的,所以让我们采取Linux.

它可以使用gcc's 实现,__attribute__((dtor))但标准库将依赖于编译器.我认为这不是它的工作方式.

任何解释或文档链接表示赞赏.谢谢.

c linux printf

12
推荐指数
1
解决办法
2662
查看次数

当std :: fprintf(stderr,...)失败时,操作是否无效或者在失败之前可以写一点?

我有一个C++ 11程序,用于std::fprintf写入stderr日志和调试信息.我知道fprintf可以失败并返回负值,但我无法找到操作是否为原子(如果失败,没有效果),或者它可以写入文本的某些部分然后失败(或任何其他副作用).

使用的函数fprintf如下所示:

void writeToConsole (std::string const &message)
{
    std::fprintf(stderr, "%s\n", message.c_str());
}
Run Code Online (Sandbox Code Playgroud)

我正在Linux上开发使用Clang和GCC(现在),但我的问题更多是关于标准,所以......

题:

如果std::fprintf失败,仍有可能写入某些字符stderr?此行为是C/C++标准还是实现定义的?

更重要的是,如果std::fprintf失败,我应该中止该程序还是可以在没有副作用的情况下静默执行(除了不可能写入stderr)?

c++ printf c++11

12
推荐指数
2
解决办法
484
查看次数

将非空终止字符串传递给printf会导致意外值

这个C程序给出了一个奇怪的结果:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
   char str1[5] = "abcde";
   char str2[5] = " haha";

   printf("%s\n", str1);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到:

abcde haha
Run Code Online (Sandbox Code Playgroud)

我只想打印第一个字符串,从代码中可以看出.
为什么要打印它们?

c string printf

12
推荐指数
4
解决办法
1831
查看次数

printf从char数组中添加额外的`FFFFFF`到十六进制打印

请考虑以下简化代码.我想从文件中提取一些二进制数据/流,并以十六进制格式将其打印到标准输出.

我有额外的3个字节0xFFFFFF.怎么了?额外的字节来自哪里?

产量

in:
        2000FFFFFFAF00690033005A00
out:
        2000FFFFFFAF00690033005A00
Run Code Online (Sandbox Code Playgroud)

program.c

#include <stdio.h>
#include <stdlib.h>    

int main(int argc, char** argv) {

    int i;
    char raw[10] = {0x20,0x00,0xAF,0x00,0x69,0x00,0x33,0x00,0x5A,0x00};
    FILE *outfile;
    char *buf;

    printf("in:\n\t");
    for( i=0; i<10; i++ )
        printf("%02X", raw[i]);

    outfile = fopen("raw_data.bin", "w+b");

    fwrite(raw, 1, 10, outfile);

    buf = (char *) malloc (32 * sizeof(char));
    fseek(outfile, 0, SEEK_SET);
    fread(buf, 1, 10, outfile);

    printf("\nout:\n\t");
    for( i=0; i<10; i++ )
        printf("%02X", buf[i]);

    printf("\n");

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

c arrays printf

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