标签: printf

printf输出乱序

我写了以下内容:

#include <stdlib.h>
#include <stdio.h>
void ExecAsRoot (char* str);
int main ()
{
  printf ("Host real ip is:");
  ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/'");
  return 0;
 }

void ExecAsRoot (char* str) {
  system (str);
}
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

Host real ip is:7.17.11.29
Run Code Online (Sandbox Code Playgroud)

而实际输出是:

7.17.11.29
Host real ip is:
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

c printf function

10
推荐指数
1
解决办法
890
查看次数

Solaris 9上的printf + uint_64?

我有一些c(++)代码使用sprintf将uint_64转换为字符串.这需要可移植到Linux和Solaris.

在linux上我们使用%ju,但在Solaris上似乎没有任何等价物.我能找到的最接近的是%lu,但这会产生不正确的输出.一些示例代码:

#include <stdio.h>
#include <sys/types.h>

#ifdef SunOS
typedef uint64_t u_int64_t;
#endif

int main(int argc, char **argv) {
    u_int64_t val = 123456789123L;

#ifdef SunOS
    printf("%lu\n", val);
#else
    printf("%ju\n", val);
#endif
}
Run Code Online (Sandbox Code Playgroud)

在linux上,输出是预期的; 在Solaris 9上(不要问),它是"28"

我可以用什么?

c c++ printf

9
推荐指数
2
解决办法
4429
查看次数

在bash中重定向C程序输出时出现问题

我C编码的一个程序,用printf将消息发送到标准输出和我无法将输出重定向到一个文件(从bash中运行).

我试过了:

./program argument >> program.out
./program argument > program.out
./program >> program.out argument
./program > program.out argument
Run Code Online (Sandbox Code Playgroud)

在每种情况下,都会创建文件program.out但它仍然为空.执行结束后,文件大小为0.

如果我在执行程序时省略重定向:

./program argument
Run Code Online (Sandbox Code Playgroud)

然后,使用printf发送到stdout的所有消息都显示在终端中.

我有其他C程序,我没有问题以这种方式重定向输出.它与程序本身有关吗?与论点传递?应该在哪里寻找问题?

关于C程序的一些细节:

  • 它没有从stdin中读取任何内容
  • 它使用BSD Internet Domain套接字
  • 它使用POSIX线程
  • 它使用sigaction为SIGINT信号分配一个特殊的处理函数
  • 它向stdout发送了许多换行符(对于那些认为我应该刷新的人)

一些代码:

int main(int argc, char** argv)
{
    printf("Execution started\n");
    do
    {        
        /* lots of printf here */
    } while (1);
    /* Code never reached */
    pthread_exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

c linux bash printf redirect

9
推荐指数
2
解决办法
8975
查看次数

舍入双打 - .5 - sprintf

我正在使用以下代码舍入到2dp:

sprintf(temp,"%.2f",coef[i]); //coef[i] returns a double
Run Code Online (Sandbox Code Playgroud)

它成功地将6.666舍入到6.67,但在舍入5.555时它无法正常工作.它返回5.55,而它应该(至少在我看来)返回5.56.

当下一个数字是5时,我怎样才能将它弄圆?即返回5.56.

编辑:我现在意识到这种情况正在发生,因为当我用cin输入5.555时它会被保存为5.554999997.

我将尝试分两个阶段 - 首先是3dp然后是2dp.还有其他(更优雅)的想法吗?

c++ printf rounding

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

printf中"%.6d"是什么意思

这是什么%.6d意思的:

printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len);
Run Code Online (Sandbox Code Playgroud)

这是一个错字吗?

它似乎%.6d是一样的%6d.

c formatting printf

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

使用'printf'返回字符串,而不是打印它

这可能听起来很奇怪,但这里有.

我喜欢使用这种在php中构建字符串的技术

printf(__('This is %1$s, this is %2$s'), myFunction1(), myFunction2());
Run Code Online (Sandbox Code Playgroud)

显然,无论何时调用函数,这都会直接打印结果,但我想使用这种技术来构建一个字符串,然后在其他地方使用它.

这可能吗?

多谢你们.

php string printf

9
推荐指数
1
解决办法
5054
查看次数

%x和〜的重要性

int m=32
printf("%x" , ~m);
Run Code Online (Sandbox Code Playgroud)

此语句的输出是ffdf和没有~输出的20.什么是意义%x和~?

c printf

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

如何在Java中正确使用printf格式化

我正在尝试创建一个简单的程序来接收三个项目,它们的数量和价格,并将它们全部加在一起以创建一个简单的收据类型格式.我的教授给了我一个特定的收据格式,其中所有小数都排成一行并且一致地放置.它看起来应该是这样的.

Your Bill:


Item                           Quantity       Price         Total
Diet Soda                            10        1.25         12.50
Candy                                1         1.00          1.00
Cheese                               2         2.00          4.00


Subtotal                                                    17.50
6.25% Sales Tax                                              1.09
Total                                                       18.59
Run Code Online (Sandbox Code Playgroud)

我的教授指出名称应该有30个字符,数量和价格应该是10个字符和总数.这样做我必须使用printf方法.到目前为止,我正在尝试使用此代码对其进行格式化.

import java.util.Scanner;
class AssignmentOneTest {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);

        // System.out.printf("$%4.2f for each %s ", price, item);
        // System.out.printf("\nThe total is: $%4.2f ", total);

        // process for item one
        System.out.println("Please enter in your first item");
        String item = kb.nextLine();
        System.out.println("Please enter the quantity for …
Run Code Online (Sandbox Code Playgroud)

java printf

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

更好地理解c中可变参数的类型推广

当在c中调用变量参数函数时,整数参数被提升为int,浮点参数被提升为double

由于原型未指定可选参数的类型,因此在调用可变参数函数时,将对可选参数值执行默认参数提升.这意味着类型char或short int(无论是否签名)的对象被提升为任何一个int或unsigned int适当的; 并且类型的对象float被提升为类型double.因此,如果调用者将a char作为可选参数传递,则将其提升为a int,并且该函数可以使用它来访问它va_arg (ap, int).

int类型应该是32位机器上的4字节和64位机器上的8字节,是吗?
所以我想知道当我将一个long long int带有%lld格式的printf 传递给变量参数函数时会追加什么.
而且,我再次想知道当我将一个long double变量传递给带有%Lf格式的printf时(无论是在32位还是64位机器上).

[已编辑 ]

在32位机器上,我试过这个:

#include <stdio.h>

int main(void)
{
    printf("sizeof(int) %d\n", sizeof(int));
    printf("sizeof(long int) %d\n", sizeof(long int));
    printf("sizeof(long long int) %d\n", sizeof(long long int));
    printf("%lld\n", 1LL<<33);

    printf("sizeof(float) %d\n", sizeof(float));
    printf("sizeof(double) %d\n", sizeof(double));
    printf("sizeof(long double) %d\n", sizeof(long double)); …
Run Code Online (Sandbox Code Playgroud)

c floating-point int printf c99

9
推荐指数
1
解决办法
557
查看次数

Clang 使用什么标准 C 库?glibc,它自己的,还是其他的?

我很确定 glibc 是 gcc 的标准 C 库实现的名称。

但对于 LLVM/Clang,我不确定。我已经在谷歌上搜索过它是否带有整个标准 C 库的自己的实现,或者它们是否也使用 glibc。令人惊讶的是,我能找到的只是最近一篇讨论Google 正在考虑为 LLVM 编写新 libc 的文章。但不是那会取代什么。

即使在 LLVM/Clang 源代码库中,我也很有可能只是盲目或愚蠢,但我似乎找不到它。

明确地说,我只对 C 标准库感兴趣,而不是 C++ 标准库。我对研究它们printf对函数族的实现特别感兴趣。

有人可以告诉我在哪里可以找到 Clang 的 libc/标准 C 库实现或其源代码库吗?

printf glibc libc llvm-clang c-standard-library

9
推荐指数
4
解决办法
5528
查看次数