我们有以下代码片段:
char tab[2][3] = {'1', '2', '\0', '3', '4', '\0'};
printf("%s\n", tab);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我们在通话中没有收到错误/警告我收到警告但没有错误,程序运行正常.它打印' printf.12'.
printf期待一个类型的参数char *,即指向char.所以,如果我声明char arr[3],那么arr是一个包含a的内存单元的地址char,所以如果我printf用它调用它会衰减指向char,即char *.
类似地,tab是包含3个字符的类型数组的存储器单元的地址,而存储器单元的地址包含char,因此tab将衰减char **,并且它应该是一个问题,因为printf期望a char *.
有人可以解释这个问题吗?
我得到的警告是:
a.c:6: warning: char format, different type arg (arg 2)
最近有一个关于SO的问题(为什么有人会使用strncpy而不是strcpy?),这是hade的答案(答案1,答案2),这使我不确定其他字符串函数的名字中带有'n',如snprintf(我一直在广泛使用).snprintf可以安全使用吗?一般来说,'n'家族的安全功能是什么?
我想在过去5分钟内得到平均负荷的四舍五入.所以这是我的命令:
uptime | awk -F, '{print $5}'|printf "%.0f\n"
Run Code Online (Sandbox Code Playgroud)
它似乎不正确,因为它总是给我0.
如果我试图在awk和printf之间使用变量作为中间,那么它是正确的
avgload=$(uptime | awk -F, '{print $5}')
printf "%.0f\n" $avgload
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试有什么不对吗?
感谢致敬!
更新:
只是为了获得过去5分钟的平均负载,这是我的linux服务器(Kubuntu)的正常运行时间输出
$ uptime
13:52:19 up 29 days, 18 min, 15 users, load average: 10.02, 10.04, 9.58
在我的笔记本电脑(Ubuntu)上它是相似的
`$正常运行时间
13:53:58上3天,12:02,8个用户,平均负载:0.29,0.48,0.60`
这就是我参加第五场比赛的原因.
我使用printf输出文本文件的柱状显示.
但是我想要的长度会导致列流入下一行.
我一直在寻找一个标志或解决方法,使控制台窗口滚动,只能遇到以下情况:
设置水平滚动模式开
它正好在#!/ bin/bash行,但无法正常工作
还有另外一种方法吗?
我想使用Perl的sprintf来对变量进行zerofill.
sprintf("%08d", $var);
Run Code Online (Sandbox Code Playgroud)
但我想动态确定zerofill有多少位数.
如何sprintf("%08d", $var)用一个名为$zerofill?的变量替换"8"in ?
我何时会在PHP中使用printf而不是echo,为什么?我只是不明白为什么理解这一点很重要.谢谢!
我正在尝试制作一个简单的x86汇编程序(我使用NASM作为我的汇编程序),它使用ANSI代码将终端文本颜色更改为红色,然后打印一些将用红色前景打印的内容.代码如下:
; This macro is equivalent to printf(message)
%macro print 1
lea rdi, [rel %1]
call _printf
%endmacro
; Example call:
; print prompt
; Where prompt is something like:
; prompt:
; db "Hiya dude! What's your name?", 0
; These are the terminal colors, they are ANSI codes that, when printed, will change the color of the text.
section .data
COLOR_FORE_RED:
db "\033[31m",0 ; ANSI Fore Red code
%define SetColor_FRed print COLOR_FORE_RED
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下内容时使用这些宏:
SetColorFRed ; Set text color …Run Code Online (Sandbox Code Playgroud) 考虑有一组数字:
my @array = (
1.788139343e-007, 0.0547055073198, -0.703213036125,
-0.583665880391, -1.41198285298, +0.171879081676,
-0.58966025098, -86.0627173425, -0.84449797709,
3.49876623321e-005, 3.02660429162, -0.256948695361);
Run Code Online (Sandbox Code Playgroud)
我想将小数点对齐在总宽度为m的第n列(可能n = 6和m = 25)
如果使用%fi得到很好的对齐数字,但需要科学记数法的数字正在被破坏.usging %g将点后面的precision参数解释为绝对精度,在小数点后产生不同的小数.由于大多数数字在(-10,10)范围内,我不想采用科学记数法%e
是否有我忽略的标志或格式属性(或组合)?
预期的结果将是:
foreach my $f (@array){
printf("[%+25.12g]$/", $f);
}
[ +1.788139343e-007 ]
[ +0.0547055073198 ]
[ -0.703213036125 ]
[ -0.583665880391 ]
[ -1.41198285298 ]
[ +0.0171879081676 ]
[ -0.58966025098 ]
[ -86.0627173425 ]
[ -0.84449797709 ]
[ +3.49876623321e-005 ]
[ +3.02660429162 ]
[ -0.256948695361 ]
Run Code Online (Sandbox Code Playgroud)
甚至更好
[ +1.7881393430000e-007 ]
[ +0.0547055073198 ] …Run Code Online (Sandbox Code Playgroud) 我试图将给定整数中的所有0替换为5。
为此,我正在使用sprintf将整数转换为字符串并对字符串进行操作,最后将字符串转换回整数
下面是代码:
#include<stdio.h>
int main() {
int num=0, i=0;
char str[10];
printf("Enter the number: ");
scanf("%d",&num);
sprintf(str,"%d",num);
printf("string str:%s",str);
while(str[i]!='\0')
{
if(str[i]==0)
str[i]=5;
i++;
}
sscanf(str,"%d",&num);
printf("\nBefore replacement: %s", str);
printf("\nAfter replacement: %d", num);
}
Run Code Online (Sandbox Code Playgroud)
我输出错误
有人可以识别并纠正这里的问题。谢谢 :)