是否有可能只打印出一个Cstring的某一部分,而没有一个单独的子string?
说我有以下几点:
char* string = "Hello, how are you?";
是否有可能只打印出这个string的最后5个字节? 那么只有前5个字节呢? 是否有一些可以允许的printf
变体?
是否有可能只打印出这个string的最后5个字节?
是的,只需要传递一个指向倒数第五个字符的指针即可。 你可以通过string + strlen(string) - 5
来确定。
那么只有前5个字节呢?
使用精度说明符: %.5s
#include <stdio.h> #include <string.h> char* string = "Hello, how are you?"; int main() { /* print at most the first five characters (safe to use on short strings) */ printf("(%.5s)\n", string); /* print last five characters (dangerous on short strings) */ printf("(%s)\n", string + strlen(string) - 5); int n = 3; /* print at most first three characters (safe) */ printf("(%.*s)\n", n, string); /* print last three characters (dangerous on short strings) */ printf("(%s)\n", string + strlen(string) - n); return 0; }
是的,该string的最后五个字节可以完成:
printf ("%s\n", &(string[strlen (string) - 5]));
前五项可以用:
printf ("%.5s\n", string);
你可以把两者结合起来,在string中获取子string。 这个词how
可以打印:
printf ("%.3s\n", &(string[strlen (string) + 7]));
你必须小心,string是足够长的这个工作。 打印一个字符的string的最后五个字符将导致未定义的行为,因为索引结束于-4
。 换句话说,在尝试这个之前检查string的长度。