fprintf для записи в буфер первых k символов

Мне дан путь к файлу, который я должен изменить, либо добавить данные в файл, либо переопределить данные в файле .txt.

У меня также есть ограничение, если в строке, на которую указывают данные, 100 символов, а ограничение равно 10, то fprintf должен писать только первые 10 символов.

Кажется, fprintf не принимает такой параметр (лимит). Может ли кто-нибудь предложить мне способ решить эту проблему? Заранее спасибо!

void my_write (char* path, int bytes_number, char* flag, char* data, int sockfd)
{
    FILE* fp;
    int n, i;
    char buffer[BUFFER_SIZE];
    if (!strcmp(flag, "override"))
    {
        fp = fopen(path, "w+"); /* Open file with flag 'w' to override data */
        if (fp == NULL) /* File doesn't exist, invalid path*/
            write (sockfd, "Failure", strlen("Failure"));
        i = fprintf (fp, "%s\n", data);
        if (i < 0)
            write (sockfd, "Failure", strlen("Failure"));
        else
            write (sockfd, "Write Success", strlen("Write Success"));
    }
    rest of code
}

person Tony Tannous    schedule 06.05.2016    source источник


Ответы (2)


Кажется, fprintf не принимает такой параметр (лимит).

Вы можете указать ширину и точность строк в printf. Точность, указанная после точки, обрезает строку, если она длиннее:

printf("%.5s\n", data);

напечатает не более пяти символов data.

Вы можете сделать ширину и точность переменной, указав звездочку. Затем printf ожидает целочисленный параметр для каждой звезды перед фактическим (строковым) аргументом:

printf("%.*s\n", k, data);

Обратите внимание, что ширина и точность должны быть типа int. При необходимости приведите параметр:

printf("%.*s\n", (int) k, data);      // k is size_t, say
person M Oehm    schedule 06.05.2016
comment
Я использую fprintf для записи данных в файл .txt. Я редактирую сообщение со всем кодом. Я попытаюсь использовать это и на fprintf. - person Tony Tannous; 06.05.2016
comment
Разумеется, форматы одинаковы для всех функций *printf. Единственная разница между fprintf, sprintf и printf заключается в приемнике, то есть в том, куда записывается отформатированная строка. - person M Oehm; 06.05.2016

Используйте fwrite() вместо fprintf()

fwrite(buffer, sizeof(char), k, fp);

где k - ваш предельный параметр

person Nick Schrock    schedule 06.05.2016