我有一个
char* aString
我想在aString
和from
之间写下to
的部分,最有效的方法是什么?
我想到了一种一次写入1个字符的方式。
char* p = aString + from;
for (int i =0; i < (to-from); i++) {
fprintf(aFile, "%c", p++);
}
我想知道是否有更快的方式?
答案 0 :(得分:6)
答案 1 :(得分:6)
唐是对的,fwrite是最快的。
也就是说,这里有一点知道printf(和snprintf,vprintf等)的功能,允许你在一次通话中完成。
printf("%.*s", to - from, aString + from);
这是如何运作的。为字符串提供精度表示打印不超过那么多字符(如果它首先找到'\ 0',它可以打印更少)。所以像这样的一行:
printf("%.5s", "0123456789");
将打印:
01234
接下来,如果需要在运行时指定精度,用*替换数字,并在字符串之前提供长度作为函数参数:
printf("%.*s", 5, "0123456789"); // same as before
如果你想要做的只是打印字符串的一部分,这个技巧就是矫枉过正。但结合其他格式,它可能非常有用:
printf("Token %d: \"%.*s\"\n",
tok,
token_info[tok].len,
str + token_info[tok].start);
答案 2 :(得分:2)
您可以按如下方式使用fwrite:
char *s = "abcdef";
fwrite(s,sizeof(char),2,stdout); // prints ab
fwrite(s+2,sizeof(char),2,stdout); // prints cd
// In general
fwrite(s+from,sizeof(char),to-from,stdout); // print char bet s[from] to s[to]
如果要写入文件,可以用相应的文件指针替换stdout。