假设我有一个char* str = "0123456789"
并且我想要剪切第一个和最后三个字母并打印中间,这是最简单,最安全的方法吗?
现在的诀窍:要切割的部分和要打印的部分是可变大小的,所以我可以有一个非常长的char*,或者非常小的char*.
您可以使用printf()
,并使用特殊格式字符串:
char *str = "0123456789"; printf("%.6s\n", str + 1);
%s
转换说明符中的精度指定要打印的最大字符数.您也可以使用变量在运行时指定精度:
int length = 6; char *str = "0123456789"; printf("%.*s\n", length, str + 1);
在此示例中,*用于指示下一个参数(length
)将包含%s
转换的精度,相应的参数必须为a int
.
如上所述,指针算术可用于指定起始位置.
[编辑]
还有一点,如果您的字符串比精度说明符短,则会打印更少的字符,例如:
int length = 10; char *str = "0123456789"; printf("%.*s\n", length, str + 5);
将打印" 56789
".如果始终要打印一定数量的字符,请同时指定最小字段宽度和精度:
printf("%10.10s\n", str + 5);
要么
printf("%*.*s\n", length, length, str + 5);
将打印:
" 56789"
您可以使用减号在字段中左对齐输出:
printf("%-10.10s\n", str + 5);
最后,最小场宽和精度可以不同,即
printf("%8.5s\n", str);
将在8个字符的字段中打印最多5个字符右对齐.
Robert Gamble和Steve分别拥有大部分内容.组装成一个整体:
void print_substring(const char *str, int skip, int tail) { int len = strlen(str); assert(skip >= 0); assert(tail >= 0 && tail < len); assert(len > skip + tail); printf("%.*s", len - skip - tail, str + skip); }
调用示例:
print_substring("0123456789", 1, 3);