什么是字符串格式intptr_t, uintptr_t 哪个对32位和64位架构都有效.
编辑
warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type "AAA"
Run Code Online (Sandbox Code Playgroud)
这是我在64位但不是32位的警告.
intptr_t AAA
Run Code Online (Sandbox Code Playgroud) 给定一个文本,$txt我怎么能在Bash中将它证明为给定的宽度.
示例(宽度= 10):
如果$txt=hello,我想打印:
hello |
Run Code Online (Sandbox Code Playgroud)
如果$txt=1234567890,我想打印:
1234567890|
Run Code Online (Sandbox Code Playgroud) 我不明白这个C代码中的内容%s和d%操作:
for (i=0;i<sizeof(code)/sizeof(char*); i++) {
printf("%s%d%s%d\n", "Length of String ", i, " is ", strlen(code[i]));
str = code[i];
printf("%s%d%s%c\n","The first character in string ", i, " is ", str[0]);
}
Run Code Online (Sandbox Code Playgroud)
我是C语言的新手,我的背景是Java.
%s%d%s%d符号表示?+?我正在学习C++.cout是一个std::ostream类的实例.如何用它打印格式化的字符串?
我仍然可以使用printf,但我想学习更多C++风格的方法,它可以带来所有C++的好处.我认为这应该是可能的,std::ostream但我找不到合适的方法.
我只是想将一些C代码转换为Java,我遇到了一些麻烦String.printf.
在C中,为了获得基于变量的特定宽度,我可以使用:
printf("Current index = %*d\n", sz, index);
Run Code Online (Sandbox Code Playgroud)
它会将整数格式化为特定的大小sz.
试:
System.out.println(String.format("Current index = %*d\n", sz, index));
Run Code Online (Sandbox Code Playgroud)
导致错误,因为它不喜欢*.
我目前有以下kludge:
System.out.println(String.format("Current index = %" + sz + "d\n", index));
Run Code Online (Sandbox Code Playgroud)
但是我希望有一个更好的方法,是吗?
我有一个温度转换程序作为一项任务,我已经完成了.该程序中有许多printf声明可以打印温度.现在,负温度按照我想要的方式打印,但正面温度打印时没有前导+符号.
现在,printf打印+正数的最佳方法是什么?我能想到的只是改变
printf("Min temp = %d\n",max_temp)
Run Code Online (Sandbox Code Playgroud)
至
if(max_temp > 0)
printf("+");
printf("Min temp = %d\n",max_temp)
Run Code Online (Sandbox Code Playgroud)
但这要求程序中的许多变化:(
另一个选择是编写我自己的打印功能并将此逻辑放在那里.你有什么建议?
在Windows中,它是"%I64d".在Linux和Solaris中,它是"%lld".
如果我想编写跨平台printfs打印long long值:这样做的好方法是什么?
long long ll;
printf(???, ll);
Run Code Online (Sandbox Code Playgroud) 背景:我有许多脚本通过查找前导"0x"来解析查找十六进制数字的日志文件.我们的嵌入式C库改为新的printf.新的printf比我们之前更符合标准,我的脚本破了.
在Linux机器上:
#include <stdio.h>
int main( void )
{
printf( "%#010x\n", 0 );
printf( "%#010x\n", 1 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出(使用glibc)是:
0000000000
0x00000001
Run Code Online (Sandbox Code Playgroud)
我们公司的输出是:
0x00000000
0x00000001
Run Code Online (Sandbox Code Playgroud)
从printf(3)开始,在'#'标志字符上:"对于x和X转换,非零结果的前缀为字符串"0x"(或X转换为"0X")."
我很好奇为什么.如果没有挖掘C标准文件或为标准委员会成员购买午餐,为什么不在零价值论证中使用前导0x?
我正在使用Eclipse来编写C/C++代码,而我正在努力解决可能非常简单的问题.在我下面的代码中,我使用printf()和之后scanf().Althougth printf是在scanf()输出不同之前编写的.我能在这里找到类似问题的东西.但我无法解决它.有任何想法吗?
码:
#include <stdio.h>
int main()
{
int myvariable;
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
Enter a number:1
1
Run Code Online (Sandbox Code Playgroud)
相反,我得到:
1
Enter a number:1
Run Code Online (Sandbox Code Playgroud) 这是我的bash脚本 - 我只想用零填充一组数字:
printf "%04d" "09"
printf "%04d" "08"
printf "%04d" "07"
printf "%04d" "06"
Run Code Online (Sandbox Code Playgroud)
输出:
./rename.sh: line 3: printf: 09: invalid number
0000
./rename.sh: line 4: printf: 08: invalid number
0000
0007
0006
Run Code Online (Sandbox Code Playgroud)
什么...?
只有09和08导致问题:我序列中的每个其他数字似乎都没问题.