【发布时间】:2013-02-28 21:11:49
【问题描述】:
所以我有一个具有一定字节数(或长度)的字符串。我说字节是因为字符串末尾没有 NULL 终止符。不过,我知道字符串有多长。众所周知,通常情况下,当您printf("%s", str); 时,它会继续打印每个字节,直到达到 NULL 字符。我知道没有不是 NULL 终止的 C 字符串,但是我有一个奇怪的情况,我正在存储东西(不是特别是字符串)并且我不存储 NULL,而是“事物”的长度。
这是一个小例子:
char* str = "Hello_World"; //Let's use our imagination and pretend this doesn't have a NULL terminator after the 'd' in World
long len = 5;
//Print the first 'len' bytes (or char's) of 'str'
我知道你可以这样做:
printf("%.5s", str);
但是在这种情况下,我很难将 5 编码到其中,尽管在我的情况下,5 在变量中。我会这样做:
printf("%.(%l)s", len, str);
但我知道你不能那样做。但让您了解我想要完成的工作。
【问题讨论】:
-
这里已经回答了一个非常相似的问题:stackoverflow.com/a/4777218/2163085
-
SO 4777218 是相关的,但有些不同(主要指分配而不是打印)。
-
您可以使用
snprintf(format, sizeof(format), "%%.%ds", len);创建适当的格式字符串,然后在对printf()的调用中使用format。如果你正在做scanf(),那么如果输入长度不同,你实际上必须这样做(scanf()中的*与printf()中的*非常不同)。 OTOH,printf("%.*s\n", len, str)机制通常最适合printf()。