Эффективный способ печати строки в файл - PullRequest
1 голос
/ 15 января 2010

у меня есть

char* aString

и я хочу написать часть aString между from и to, какой самый эффективный способ?

Я думаю о способе, который записывает 1 символ за раз.

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

Интересно, есть ли более быстрый путь?

Ответы [ 3 ]

6 голосов
/ 15 января 2010

Дон прав, что fwrite - самый быстрый.

Тем не менее, есть небольшая известная особенность printf (и snprintf, vprintf и т. Д.), Которая позволяет вам сделать это за один вызов.

printf("%.*s", to - from, aString + from);

Как это работает. Обеспечение точности для строки говорит о том, что print печатает не больше, чем столько символов (он может печатать меньше, если сначала находит '\ 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);
6 голосов
/ 15 января 2010
2 голосов
/ 15 января 2010

Вы можете использовать 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]

Если вы хотите записать в файл, вы можете заменить стандартный вывод указателем соответствующего файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...