我用的使用混淆%c和%s下面的C程序
#include<stdio.h>
void main()
{
char name[]="siva";
printf("%s\n",name);
printf("%c\n",*name);
}
Run Code Online (Sandbox Code Playgroud)
输出是
siva
s
Run Code Online (Sandbox Code Playgroud)
为什么我们需要使用指针来显示字符%c,并且字符串不需要指针
我使用时收到错误
printf("%c\n", name);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
str.c: In function ‘main’:
str.c:9:2: warning: format ‘%c’ expects type ‘int’, but argument 2 has type ‘char *’
Run Code Online (Sandbox Code Playgroud) 有没有办法使用C sprintf()函数而不在其输出的末尾添加'\ 0'字符?我需要在固定宽度字符串的中间写入格式化文本.
在C中,我想使用printf来显示指针,以便它们正确排列,我想用0填充它们.
我的猜测是,正确的方法是:
printf("%016p", ptr);
这有效,但是这个gcc抱怨以下消息:
warning: '0' flag used with ‘%p’ gnu_printf format
我已经谷歌搜索了一下,以下主题是关于同一主题,但并没有真正给出解决方案.
http://gcc.gnu.org/ml/gcc-bugs/2003-05/msg00484.html
阅读它,似乎gcc抱怨的原因是我建议的语法没有在C99中定义.但我似乎无法找到任何其他方式以标准批准的方式做同样的事情.
所以这是双重问题:
我想在C++中使用Microsoft Visual Studio 2010 打印出size_t变量的值printf(我想使用printf而不是<<在这段特定的代码中,所以请不要回答告诉我应该使用它<<).
根据帖子
正确的平台无关方式是使用%zu,但这似乎在Visual Studio中不起作用.Visual Studio文档
http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx
告诉我,我必须使用%Iu(使用大写i,而不是小写l).
微软是否不遵守这些标准?或者自C99以来标准是否已更改?或者C和C++之间的标准是不同的(这对我来说似乎很奇怪)?
我在一个带有变量的bash脚本中回显一些文本,并且想要填充该变量,以便它总是在右边有适当的空格,以保持文本的其余部分对齐.
这是我想要的一个例子:
Echoing random number 1080 [ OK ]
Echoing random number 443 [ OK ]
Echoing random number 34842 [ OK ]
Run Code Online (Sandbox Code Playgroud)
数值的长度可以变化(可能不超过5或6位).
我知道printf可以执行此操作并通过执行以下操作右对齐变量:
printf "Echoing random number %5s [ OK ]" $RAND_NUM
Run Code Online (Sandbox Code Playgroud)
但是,这会格式化文本,如下所示:
Echoing random number 1080 [ OK ]
Echoing random number 443 [ OK ]
Echoing random number 34842 [ OK ]
Run Code Online (Sandbox Code Playgroud)
当然只是用空格回声并不起作用:
echo "Echoing random number ${RAND_NUM} [ OK ]"
Run Code Online (Sandbox Code Playgroud)
产生这个:
Echoing random number 1080 [ OK ]
Echoing random number 443 [ OK ] …Run Code Online (Sandbox Code Playgroud) 我想知道这两个选项中哪一个更安全:
#define MAXLEN 255
char buff[MAXLEN + 1]
Run Code Online (Sandbox Code Playgroud)
sprintf(buff, "%.*s", MAXLEN, name)
snprintf(buff, MAXLEN, "%s", name)
我的理解是两者都是一样的.请建议.
我有这个arduino草图,
char temperature[10];
float temp = 10.55;
sprintf(temperature,"%f F", temp);
Serial.println(temperature);
Run Code Online (Sandbox Code Playgroud)
温度打印出来
? F
Run Code Online (Sandbox Code Playgroud)
有关如何格式化浮点数的任何想法?我需要它是一个字符串.
我非常格式化浮点数,但如果没有相关的浮点数,则希望它显示为整数.
即
我可以通过一些正则表达式实现这一点,但想知道是否有sprintf这样做的唯一方法?
我喜欢懒洋洋地在红宝石中这样做:
("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
Run Code Online (Sandbox Code Playgroud) 我想格式化一个字符串,sprintf但重复多次参数.看到..
$str = "Str 1: %s - Str 2: %s - Str 2 again: %s";
Run Code Online (Sandbox Code Playgroud)
考虑到要格式化的字符串,我想重复第二次arg两次.
echo sprintf($str, "I'm string 1", "My name is string 2");
Run Code Online (Sandbox Code Playgroud)
想要的结果如下:
Str 1: I'm string 1 - Str 2: My name is string 2 - Str 2 again: My name is string 2
Run Code Online (Sandbox Code Playgroud)
有办法吗?
例子:
"Something %d" and "Something else %d" // Compatible
"Something %d" and "Something else %f" // Not Compatible
"Something %d" and "Something %d else %d" // Not Compatible
"Something %d and %f" and "Something %2$f and %1$d" // Compatible
Run Code Online (Sandbox Code Playgroud)
我认为应该有一些C功能,但我没有得到任何相关的搜索结果.我的意思是编译器正在检查格式字符串和参数是否匹配,因此已经编写了用于检查它的代码.唯一的问题是我怎么称呼它.
我正在使用Objective-C,所以如果有一个Objective-C特定的解决方案也没关系.