使用带有非null终止字符串的printf

时间:2010-09-22 07:51:16

标签: c string format printf

假设您有一个非null终止的字符串并且您知道它的确切大小,那么如何在C中使用printf打印该字符串?我记得这样的方法,但我现在找不到......

6 个答案:

答案 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

第二种形式是从参数列表中获取精度:

  

您还可以指定'*'的精度。这意味着参数列表中的下一个参数(在要打印的实际值之前)用作精度。该值必须为int,如果为负,则忽略该值。

glibc手册中的

- Output conversion syntax

对于%s字符串格式,精度具有特殊含义:

  

可以指定精度来指示要写入的最大字符数;否则,字符串中最多但不包括终止空字符的字符将写入输出流。

glibc手册中的

- Other output conversions

其他有用的变体:

  • "%*.*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;

}