在C中打印字符串的一部分

时间:2011-01-30 04:50:44

标签: c c-strings

有没有办法只打印部分字符串?

例如,如果我有

char *str = "hello there";

有没有办法只打印"hello",请记住我要打印的子字符串是可变长度,而不是总是5个字符?

我知道我可以使用for循环和putchar或者我可以复制数组然后添加一个空终止符,但我想知道是否有更优雅的方式?

4 个答案:

答案 0 :(得分:30)

试试这个:

int length = 5;
printf("%*.*s", length, length, "hello there");

答案 1 :(得分:16)

这也可以:

fwrite(str, 1, len, stdout);

它不会有解析格式说明符的开销。显然,要调整子字符串的开头,只需将索引添加到指针即可。

答案 2 :(得分:1)

您可以使用strncpy复制要打印的字符串部分,但是您必须注意添加空终结符,因为如果它strncpy将不会这样做在源字符串中没有遇到一个。正如Jerry Coffin所指出的,更好的解决方案是使用适当的*printf函数来写出或复制你想要的子字符串。

尽管strncpy对于不习惯的人来说可能是危险的,但与printf / sprintf / {{1}相比,它在执行时间方面会更快样式解决方案,因为没有处理格式化字符串的开销。我的建议是尽可能避免fprintf,但为了以防万一,最好知道。

strncpy

答案 3 :(得分:0)

printf 和朋友们在使用部分字符串完成所有工作时效果很好,但是对于更通用的解决方案:

char *s2 = s + offset;
char c = s2[length]; // Temporarily save character...
s2[length] = '\0';   // ...that will be replaced by a NULL
f(s2);  // Now do whatever you want with the temporarily truncated string
s2[length] = c;      // Finally, restore the character that we had saved