使用printf与一个非空终止的string

假设你有一个string不是null终止,你知道它的确切大小,所以你怎么能打印在C中的printfstring? 我记得这样的方法,但现在我找不到

有printf的可能性,它是这样的:

 printf("%.*s", stringLength, pointerToString); 

无需复制任何东西,不需要修改原始string或缓冲区。

以下是对%.*s如何工作以及指定位置的解释。

printf模板string中的转换规范具有以下通用forms:

 % [ param-no $] flags width [ . precision ] type conversion 

要么

 % [ param-no $] flags width . * [ param-no $] type conversion 

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

你也可以指定一个“*”的精度。 这意味着参数列表中的下一个参数(在要打印的实际值之前)被用作精度。 该值必须是一个整数,如果是负值,则会被忽略。

– glibc手册中的输出转换语法

对于%sstring格式,精度有特殊的含义:

可以指定精度以指示要写入的最大字符数; 否则直到但不包括终止空字符的string中的字符被写入输出stream。

– glibc手册中的其他输出转换

其他有用的变体:

  • "%*.*s", maxlen, maxlen, val会右alignment,在之前插入空格;
  • "%-*.*s", maxlen, maxlen, val会左alignment。

你可以使用fwrite()来标准输出!

 fwrite(your_string, sizeof(char), number_of_chars, stdout); 

这样你将输出第一个字符(在number_of_charsvariables中定义的数字)到一个文件,在这种情况下,输出到标准输出,你的屏幕!

printf("%.*s", length, string)将不起作用。

这意味着打印最多长度字节或空字节,以先到者为准。 如果你的非空终止的char数组包含空字节的长度,那么printf将停在这些字段上,而不是继续。

 #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; } 
 printf("%.5s", pointerToNonNullTerminatedString); 

string长度将是5。