%.*s——C语言中printf 函数中的一种格式化输出方式
在C语言中,
%.*s
是printf
函数中的一种格式化输出方式,用于控制字符串的输出长度。具体来说,%.*s
中的*
表示输出宽度(即最多输出的字符数)是一个变量,这个变量的值在运行时通过printf
函数的参数传递。了解更多C语言字符串输出格式点击:C语言,printf函数的多种格式化字符串的方式-CSDN博客
格式说明
-
%.*s
:其中*
表示输出宽度是一个变量。-
%
:格式化输出的开始标志。 -
*
:表示输出宽度(即最多输出的字符数)是一个变量。 -
s
:表示输出的类型是字符串。
-
使用方法
在使用 %.*s
时,需要在 printf
函数中提供两个参数:
-
输出宽度(一个整数)。
-
要输出的字符串。
示例
假设我们有一个字符串 str
和一个整数 width
,我们希望输出 str
的前 width
个字符,可以这样写:
char str[] = "Hello, World!";
int width = 5;
printf("%.*s\n", width, str);
输出
Hello
在这个例子中,width
的值为 5,所以 printf
函数只输出 str
的前 5 个字符,即 Hello
。
应用场景
-
限制输出长度:在处理用户输入或文件内容时,有时需要限制输出的字符串长度,以避免过长的输出。
-
格式化输出:在生成日志文件或格式化输出时,可以使用
%.*s
来控制每行的输出长度,使输出更加整齐。
完整示例
以下是一个完整的示例,展示了如何使用 %.*s
来输出字符串的指定长度部分:
#include <stdio.h>
int main() {
char str[] = "This is a long string that we want to truncate.";
int width1 = 10;
int width2 = 15;
printf("First 10 characters: %.*s\n", width1, str);
printf("First 15 characters: %.*s\n", width2, str);
return 0;
}
输出
First 10 characters: This is a
First 15 characters: This is a long
在这个示例中,我们分别输出了字符串的前 10 个字符和前 15 个字符,展示了 %.*s
的使用方法。
高级用法:输出特定区间的字符串(本质是指针的移动)
由于下标从零开始,所以,想从索引几开始,字符串首地址就移动几位
假设你有一个字符串 "Hello, World!"
,你想输出从索引 7
开始的长度为 5
的子字符串(即 "World"
):
char str[] = "Hello, World!";
int start = 7; // 起始位置
int length = 5; // 输出长度
// 计算子字符串的起始指针
char *sub_str = str + start;//
// 使用 %.*s 输出子字符串
printf("%.*s\n", length, sub_str); // 输出: World