标签: printf

printf与std :: cout

可能重复:
我应该在我的C++代码中使用printf吗?

如果我只想string在屏幕上打印,我可以使用以下两种方式:

printf("abc");

std::cout << "abc" << std::endl;
Run Code Online (Sandbox Code Playgroud)

案例是,并且在上面显示的例子中,有使用printf结束的优点std::cout,反之亦然?

c++ printf cout

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

打印非常大的浮点数

#include <stdio.h>
#include <float.h>

int main()
{
    printf("%f\n", FLT_MAX);
}
Run Code Online (Sandbox Code Playgroud)

GNU的输出:

340282346638528859811704183484516925440.000000
Run Code Online (Sandbox Code Playgroud)

Visual Studio的输出:

340282346638528860000000000000000000000.000000
Run Code Online (Sandbox Code Playgroud)

C和C++标准是否允许这两种结果?或者他们是否要求特定的结果?

请注意FLT_MAX = 2^128-2^104 = 340282346638528859811704183484516925440.

c c++ floating-point standards printf

13
推荐指数
1
解决办法
1326
查看次数

浮点错误是什么-1.#J是什么意思?

最近,有时(很少)从我们的应用程序导出数据时,导出日志包含看起来像"-1.#J"的浮点值.我无法重现它所以我不知道浮点数在二进制文件中是什么样的,或者Visual Studio如何显示它.

我试着查看printf的源代码,但没有找到任何东西(不是100%肯定我看了正确的版本虽然...).

我试过谷歌搜索但谷歌抛出任何#,似乎.我找不到任何浮动错误列表.

c c++ floating-point printf

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

具有lld,ld和d类型标识符的size_t变量的printf

我写了这个小代码:

#include <stdio.h>
int main() {
    size_t temp;
    temp = 100;

    printf("lld=%lld, ld=%ld, u=%u\n", temp, temp, temp);

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

我在带有gcc版本4.1.1 20070105(Red Hat 4.1.1-52)的i386 GNU/Linux机器上运行它.这是我得到的输出:

lld=429496729700, ld=100, u=7993461
Run Code Online (Sandbox Code Playgroud)

我可以理解第一个(lld)被打印为垃圾,因为当变量中只有4个字节可用时,printf尝试打印8个字节(用于signed long long表示lld)temp.但是,我无法理解为什么最后一个标识符u被打印为垃圾 - 而在我的理解中,这是最接近的适用标识符size_t.

这里我假设size_t是unsigned int(我的i386签名为4个字节).

现在,我对该printf线进行了一些调整:

...
printf("ld=%ld, u=%u, lld=%lld\n", temp, temp, temp);
...
Run Code Online (Sandbox Code Playgroud)

我有一个非常好的答案(lld部分除外).

ld=100, u=100, lld=34331653576851556
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解我在这里错过了什么吗?

非常感谢您的帮助!

[旁注:我尝试使用gcc -O[0,2]标签开/关切换优化,但观察结果没有任何差异.]

c printf

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

使用`NULL`指针转换说明符`p`的行为是什么?

我想知道是否:

void *ptr = NULL;
printf("%p\n", ptr);
Run Code Online (Sandbox Code Playgroud)

会不会给出(nil)输出?

它是依赖于标准库实现,还是C99标准规范?

c null printf

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

在Java中与printf左对齐

当我运行程序时,阶乘值右对齐.有没有办法让它左对齐,同时保持其间的50个空格?

public class Exercise_5_13
{
    public static void main( String[] args )
    {
        int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9,
                          10, 11, 12, 13, 14, 15, 16,
                          17, 18, 19, 20 };

        long factorial = 0;

        try
        {
            System.out.print("\n\n");
            System.out.printf("%s%50s\n", "Integer", "factorial");

            for ( int number : numbers )
            {
                System.out.printf( "%4d", number);
                factorial = (long)1;

                for(int i=1; i <= number; i++)
                    factorial = factorial * (long)i;

                System.out.printf("%50.0f\n",(double)factorial);
            } 

            System.out.print("\n\n");
        } 
        catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

java printf

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

printf如何在内部工作?

我很好奇printfLinux内部的工作原理.我不明白它是如何写入数据的STDOUT.

在对内部进行了一些搜索之后,我下载glibc并查看了源代码:

__printf (const char *format, ...)
{
   va_list arg;
   int done;

   va_start (arg, format);
   done = vfprintf (stdout, format, arg);
   va_end (arg);

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

在找到这个之后,我深入研究了这个vfprintf函数 - 但该文件大约有2500行不熟悉的C代码.我正在寻找10,000英尺的解释,如何printf与计算机的内存和输出一起工作,以在屏幕上显示字符.

如果我是汇编代码,我还需要做些什么才能完成相同的任务?它依赖于操作系统吗?

c assembly printf standard-library

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

如何在编译的C代码中隐藏文本?

我不太熟悉C语言并在Linux中进行编译,但我有一些问题要求并希望你能提供帮助.

我有这行代码使用已安装的命令及其参数来加入域.(见图).在我运行gcc join.c编译之后,它创建了一个文件a.out.到目前为止这么好,但是当我vim a.out查看该文件的内容时,我看到mypassword可以通过简单的文本编辑器轻松查看.(见第二张图)

编译我的C代码时,有什么办法可以避免这种情况吗?

#include <stdio.h>
#include <unistd.h>

int main ()
{
        printf("Running 'net join' with the following parameters: \n");
        char *domain="mydomain";
        char *user="domainjoinuser";
        char *pass="mypassword";
        char *vastool="/opt/quest/bin/vastool";
        char *ou="OU=test,DC=mtdomain,DC=local";
        char unjoin[512];

        sprintf(unjoin,"/opt/quest/in/vastool -u %s -w '%s' unjoin -f",user,pass);

        printf("Domain: %s\n",domain);
        printf("User: %s\n",user);
        printf("-----------------\n");

        printf("Unjoin.............\n");
        system(unjoin);

        printf("Join................\n");
        execl("/opt/quest/bin/vastool", "vastool", "-u", user, "-w", pass, "join", "-c", "ou", "-f", domain, (char*)0);

}
Run Code Online (Sandbox Code Playgroud)

在vim中查看源代码

00000000  7f 45 4c 46 02 01 01 00  00 00 …

c printf

12
推荐指数
3
解决办法
2012
查看次数

重复printf说明符标志时的行为是什么?

fprintf()家庭的功能有5级标志人物'-','+',' ','#','0'.

重复标志时指定的行为(如果有)是什么?

#include <stdio.h>
int main(void) {
  printf("%  d\n", 12);     //  12
  printf("%00d\n", 34);     // 34
  printf("%++d\n", 56);     // +56
  printf("%00*d\n", 5, 78); // 00078
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用我的gcc"i686-pc-cygwin/4.9.2",我收到"警告:重复''标志格式[-Wformat =]",所以我认为这是一个正确的行为 - >警告用户并允许重复标记.

在尝试编写格式解析器时,我还没有找到针对此角落问题的C99/C11规范指南.

如果重复允许,以下代码就可以了.如果不允许重复,则第二个0是宽度.然后,说明符具有2米的宽度0和*,这是另一个问题.

// -------v
printf("%00*d\n", 5, 78); // 00078
Run Code Online (Sandbox Code Playgroud)

c printf language-lawyer

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

为什么我不能用动态args设置printf的输出格式?

我想printf()用动态参数控制函数输出格式,如下面的代码所示:

    #include<stdio.h>

    int main(int argc,char ** argv)
    {
        printf(argv[1],"hello,world");
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

然后我编译并运行它:

$ gcc -o test test.c
$ ./test "\t%s\n"
Run Code Online (Sandbox Code Playgroud)

结果很奇怪:

\thello,world\n$
Run Code Online (Sandbox Code Playgroud)

为什么"\n"而且"\t"没有效果?

c printf arguments command-line-arguments

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