如何在C语言中只打印一些字符?

如何在C语言中只打印一些字符?,c,C,我有一个数组: char arr[]="This is the string"; 例如,如果我只想打印该字符串的前5个字符,我尝试了以下方法: printf("%-5s",arr); 但它正在打印整个字符串。为什么?您可以使用%.*s,当与printf一起使用时,它将要打印的预期字节大小和指向字符的指针作为参数。比如说, // It prints This printf("%.*s", 4, arr); 但它正在打印整个字符串。为什么? 您使用的是%-5s,这意味着-左对齐该字段中的文本

我有一个数组:

char arr[]="This is the string";
例如,如果我只想打印该字符串的前5个字符,我尝试了以下方法:

printf("%-5s",arr);

但它正在打印整个字符串。为什么?

您可以使用
%.*s
,当与
printf
一起使用时,它将要打印的预期字节大小和指向字符的指针作为参数。比如说,

// It prints This
printf("%.*s", 4, arr);
但它正在打印整个字符串。为什么?

您使用的是
%-5s
,这意味着
-
左对齐该字段中的文本


顺便说一句,输出不能通过像使用代码片段那样简单地使用已接受的答案来实现,即使它看起来像是在嘲笑

int i;
char arr[]="This is the string";

for (i = 1; i < sizeof(arr); ++i) {
    printf("%.*s\n", i, arr);
}

您可以使用
%.*s
,当与
printf
一起使用时,它将要打印的预期字节大小和指向char的指针作为参数。比如说,

// It prints This
printf("%.*s", 4, arr);
但它正在打印整个字符串。为什么?

您使用的是
%-5s
,这意味着
-
左对齐该字段中的文本


顺便说一句,输出不能通过像使用代码片段那样简单地使用已接受的答案来实现,即使它看起来像是在嘲笑

int i;
char arr[]="This is the string";

for (i = 1; i < sizeof(arr); ++i) {
    printf("%.*s\n", i, arr);
}

-
是一种用于对齐而非精确性的printf格式化程序

您需要的是用于精度的
格式化程序:

printf("%.5s", arr);
这将打印
arr
的前5个元素


如果您想了解有关printf格式化程序的更多信息,请查看。

-
是一种用于对齐而非精确性的printf格式化程序

您需要的是用于精度的
格式化程序:

printf("%.5s", arr);
这将打印
arr
的前5个元素


如果您想了解有关printf格式化程序的更多信息,请查看。

例如子字符串提取函数(将子字符串提取到buff)

char*strpart(char*str,char*buff,int start,int end)
{
int len=str!=NULL?strlen(str):-1;
char*ptr=buff;
如果(开始>结束| |结束>len-1 | | len==-1 | | buff==NULL)返回NULL;

例如,子字符串提取函数(将子字符串提取到buff)

char*strpart(char*str,char*buff,int start,int end)
{
int len=str!=NULL?strlen(str):-1;
char*ptr=buff;
如果(开始>结束| |结束>len-1 | | len==-1 | | buff==NULL)返回NULL;

对于(int index=start;index,您可以通过多种方式非常简单地执行此操作。通过循环,循环所需的次数,每次提取字符,您可以将指针沿字符串向下移动一个临时nul,在第5个字符后终止,或者您可以简单地使用
strncpy
将5个字符复制到缓冲区并打印出来。(那可能是最简单的)


如果您有任何问题,请仔细查看并告诉我。

您可以通过多种方式简单地完成。使用循环,循环所需的次数,每次提取字符,您可以沿着字符串向下移动指针,在第5个字符后临时终止,或者您可以简单地使用
strncpy
将5个字符复制到一个缓冲区并打印它(这可能是最简单的),例如



仔细检查一下,如果您有任何问题,请告诉我。

“%-5s”
只是一个字符串格式化程序。它不会截断字符串。请使用precision.Google precision for printf。@xing您确定
-
语法吗?AFAIR,
-
是一个标志…所以…
printf(%.5s),arr);
但是第五个字符是一个空格,所以看起来像四个。
“%-5s”
只是一个字符串格式化程序。它不会截断字符串。使用精度。谷歌精度为printf。@xing你确定
-
语法吗?AFAIR,
-
是一个标志…所以…
printf(%.5s),arr);
但是第五个字符是一个空格,所以看起来像是四个。我认为这个解决方案不是我们想要的case@horro为什么?他想像标题所说的那样打印字符串的某个部分。用最少的库存制造最好的东西的工程师。这是一个敲开螺母的大锤。我认为这个解决方案不是这个领域想要的case@horro为什么?他想像标题中所说的那样打印字符串的某些部分。通过使用最少库存来制造最好东西的工程师。这是一个敲开螺母的大锤额外内存消耗者:)是-内存占用者(全部13字节
:)
额外内存消耗者:)是-内存占用者(全部13字节
:)
非常适合使用
*
来允许动态选择要显示的字符数是的,在引号之间使用精度有时并不好,因为如果我想在
for循环中一致地更改其值,或者通过宏定义
#define…
像@garf365那样使用
真是太好了>*
要允许动态选择要显示的字符数是,在引号之间使用精度有时并不好,因为如果我想在循环中一致地更改其值,或者通过宏定义来定义…
,比如@Garf365
$ ./bin/strncpy
'This '