将字符串打印到文件的有效方法

时间:2010-01-15 07:20:11

标签: c

我有一个

char* aString

我想在aStringfrom之间写下to的部分,最有效的方法是什么?

我想到了一种一次写入1个字符的方式。

char* p = aString + from;
for (int i =0; i < (to-from); i++) {
    fprintf(aFile, "%c", p++);
}

我想知道是否有更快的方式?

3 个答案:

答案 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。