我写了以下内容:
#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(++)代码使用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编码的一个程序,用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程序的一些细节:
一些代码:
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) 我正在使用以下代码舍入到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.还有其他(更优雅)的想法吗?
这是什么%.6d意思的:
printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len);
Run Code Online (Sandbox Code Playgroud)
这是一个错字吗?
它似乎%.6d是一样的%6d.
这可能听起来很奇怪,但这里有.
我喜欢使用这种在php中构建字符串的技术
printf(__('This is %1$s, this is %2$s'), myFunction1(), myFunction2());
Run Code Online (Sandbox Code Playgroud)
显然,无论何时调用函数,这都会直接打印结果,但我想使用这种技术来构建一个字符串,然后在其他地方使用它.
这可能吗?
多谢你们.
int m=32
printf("%x" , ~m);
Run Code Online (Sandbox Code Playgroud)
此语句的输出是ffdf和没有~输出的20.什么是意义%x和~?
我正在尝试创建一个简单的程序来接收三个项目,它们的数量和价格,并将它们全部加在一起以创建一个简单的收据类型格式.我的教授给了我一个特定的收据格式,其中所有小数都排成一行并且一致地放置.它看起来应该是这样的.
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) 当在c中调用变量参数函数时,整数参数被提升为int,浮点参数被提升为double
由于原型未指定可选参数的类型,因此在调用可变参数函数时,将对可选参数值执行默认参数提升.这意味着类型
char或short int(无论是否签名)的对象被提升为任何一个int或unsigned int适当的; 并且类型的对象float被提升为类型double.因此,如果调用者将achar作为可选参数传递,则将其提升为aint,并且该函数可以使用它来访问它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) 我很确定 glibc 是 gcc 的标准 C 库实现的名称。
但对于 LLVM/Clang,我不确定。我已经在谷歌上搜索过它是否带有整个标准 C 库的自己的实现,或者它们是否也使用 glibc。令人惊讶的是,我能找到的只是最近一篇讨论Google 正在考虑为 LLVM 编写新 libc 的文章。但不是那会取代什么。
即使在 LLVM/Clang 源代码库中,我也很有可能只是盲目或愚蠢,但我似乎找不到它。
明确地说,我只对 C 标准库感兴趣,而不是 C++ 标准库。我对研究它们printf对函数族的实现特别感兴趣。
有人可以告诉我在哪里可以找到 Clang 的 libc/标准 C 库实现或其源代码库吗?