在C中打印char []的一部分的最简单方法

Edu*_*ipe 27 c string-formatting

假设我有一个char* str = "0123456789"并且我想要剪切第一个和最后三个字母并打印中间,这是最简单,最安全的方法吗?

现在的诀窍:要切割的部分和要打印的部分是可变大小的,所以我可以有一个非常长的char*,或者非常小的char*.

Rob*_*ble 58

您可以使用printf(),并使用特殊格式字符串:

char *str = "0123456789";
printf("%.6s\n", str + 1);
Run Code Online (Sandbox Code Playgroud)

%s转换说明符中的精度指定要打印的最大字符数.您也可以使用变量在运行时指定精度:

int length = 6;
char *str = "0123456789";    
printf("%.*s\n", length, str + 1);
Run Code Online (Sandbox Code Playgroud)

在此示例中,*用于指示下一个参数(length)将包含%s转换的精度,相应的参数必须为a int.

如上所述,指针算术可用于指定起始位置.

[编辑]

还有一点,如果您的字符串比精度说明符短,则会打印更少的字符,例如:

int length = 10;
char *str = "0123456789";
printf("%.*s\n", length, str + 5);
Run Code Online (Sandbox Code Playgroud)

将打印" 56789".如果始终要打印一定数量的字符,请同时指定最小字段宽度和精度:

printf("%10.10s\n", str + 5);
Run Code Online (Sandbox Code Playgroud)

要么

printf("%*.*s\n", length, length, str + 5);
Run Code Online (Sandbox Code Playgroud)

将打印:

"     56789"
Run Code Online (Sandbox Code Playgroud)

您可以使用减号在字段中左对齐输出:

printf("%-10.10s\n", str + 5);
Run Code Online (Sandbox Code Playgroud)

最后,最小场宽和精度可以不同,即

printf("%8.5s\n", str);
Run Code Online (Sandbox Code Playgroud)

将在8个字符的字段中打印最多5个字符右对齐.


Jon*_*ler 9

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);
}
Run Code Online (Sandbox Code Playgroud)

调用示例:

print_substring("0123456789", 1, 3);
Run Code Online (Sandbox Code Playgroud)