假设您有一个非null
终止的字符串并且您知道它的确切大小,那么如何在C中使用printf
打印该字符串?我记得这样的方法,但我现在找不到......
答案 0 :(得分:152)
printf有可能,它是这样的:
printf("%.*s", stringLength, pointerToString);
无需复制任何内容,无需修改原始字符串或缓冲区。
答案 1 :(得分:21)
以下是对%.*s
如何工作以及指定位置的解释。
printf模板字符串中的转换规范具有以下一般形式:
% [ param-no $] flags width [ . precision ] type conversion
或
% [ param-no $] flags width . * [ param-no $] type conversion
第二种形式是从参数列表中获取精度:
glibc手册中的您还可以指定'*'的精度。这意味着参数列表中的下一个参数(在要打印的实际值之前)用作精度。该值必须为int,如果为负,则忽略该值。
对于%s
字符串格式,精度具有特殊含义:
glibc手册中的可以指定精度来指示要写入的最大字符数;否则,字符串中最多但不包括终止空字符的字符将写入输出流。
其他有用的变体:
"%*.*s", maxlen, maxlen, val
将右对齐,之前插入空格; "%-*.*s", maxlen, maxlen, val
将左倾。答案 2 :(得分:18)
你可以使用fwrite()来stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
这样你就可以将第一个字符(number_of_chars变量中定义的数字)输出到一个文件,在本例中是stdout(标准输出,你的屏幕)!
答案 3 :(得分:7)
printf("%.*s", length, string)
无效。
这意味着打印UP TO长度字节或空字节,以先到者为准。如果非空终止的char-char数组在长度之前包含空字节,则printf将停止在那些字节上,而不是继续。
答案 4 :(得分:2)
printf("%.5s", pointerToNonNullTerminatedString);
字符串长度为5。
答案 5 :(得分:1)
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
我编辑了代码,这是另一种方式:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}