<p>Let's say I have a <code>char* str = "0123456789"</code> and I want to cut the first and the last three letters and print just the middle, what is the simplest, and safest, way of doing it?</p>

<p>Now the trick: The portion to cut and the portion to print are of variable size, so I could have a very long char*, or a very small one.</p>

You can use
```
printf()
```
, and a special format string:
```
```
char *str = "0123456789";
printf("%.6s\n", str + 1);
```
```
The precision in the
```
%s
```
conversion specifier specifies the maximum number of characters to print.  You can use a variable to specify the precision at runtime as well:
```
```
int length = 6;
char *str = "0123456789";    
printf("%.*s\n", length, str + 1);
```
```
In this example, the * is used to indicate that the next argument (
```
length
```
) will contain the precision for the
```
%s
```
conversion, the corresponding argument must be an
```
int
```
.
Pointer arithmetic can be used to specify the starting position as I did above.
[EDIT]
One more point, if your string is shorter than your precision specifier, less characters will be printed, for example:
```
```
int length = 10;
char *str = "0123456789";
printf("%.*s\n", length, str + 5);
```
```
Will print "
```
56789
```
".  If you always want to print a certain number of characters, specify both a minimum field width and a precision:
```
```
printf("%10.10s\n", str + 5);
```
```
or
```
```
printf("%*.*s\n", length, length, str + 5);
```
```
which will print:
```
```
"     56789"
```
```
You can use the minus sign to left-justify the output in the field:
```
```
printf("%-10.10s\n", str + 5);
```
```
Finally, the minimum field width and the precision can be different, i.e.
```
```
printf("%8.5s\n", str);
```
```
will print at most 5 characters right-justified in an 8 character field.