是否有可能只打印出一个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的长度。