假设您有一个未null
终止的字符串,并且知道其确切大小,那么如何printf
在C中打印该字符串?我记得这种方法,但现在不知道...
假设您有一个未null
终止的字符串,并且知道其确切大小,那么如何printf
在C中打印该字符串?我记得这种方法,但现在不知道...
Answers:
printf有可能,它像这样:
printf("%.*s", stringLength, pointerToString);
无需复制任何内容,无需修改原始字符串或缓冲区。
printf
甚至是一个十年之后,我
printf
最多可打印11个字符或直到遇到NULL(以先到者为准);在您的示例中,NULL首先出现。指定最大长度不会使NULL失去其“字符串结尾”的含义printf
。
这是有关%.*s
工作方式以及在何处指定的说明。
printf模板字符串中的转换规范具有以下一般形式:
% [ param-no $] flags width [ . precision ] type conversion
要么
% [ param-no $] flags width . * [ param-no $] type conversion
第二种形式是从参数列表中获取精度:
您还可以将精度指定为“ *”。这意味着参数列表中的下一个参数(在要打印的实际值之前)将用作精度。该值必须是一个int值,如果为负数则将被忽略。
— glibc手册中的输出转换语法
对于%s
字符串格式,precision具有特殊含义:
可以指定精度以指示要写入的最大字符数;否则,将字符串中的字符(直到但不包括终止空字符)写入输出流。
— glibc手册中的其他输出转换
其他有用的变体:
"%*.*s", maxlen, maxlen, val
将右对齐,并在前面插入空格;"%-*.*s", maxlen, maxlen, val
将左对齐。"%-*.*s", padding, str_view.size(), str_view.data()
您可以使用fwrite()进行标准输出!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
这样,您将第一个字符(在number_of_chars变量中定义的数字)输出到文件,在这种情况下,将输出到stdout(标准输出,您的屏幕)!
#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;
}
C
上下文中,所有字符串均以null结尾。不带null的char数组不是字符串...它们是char数组:)