fprintf untuk menulis ke buffer k karakter pertama

Saya diberi jalur ke file yang harus saya modifikasi, apakah menambahkan data ke dalam file, atau mengganti data di file.txt.

Saya juga diberi batasan, jika ada 100 karakter dalam string yang ditunjukkan oleh data, dan batasannya adalah 10, maka fprintf harus menulis 10 karakter pertama saja.

Tampaknya fprintf tidak mengambil parameter (batas) seperti itu. Bisakah seseorang menyarankan cara bagi saya untuk menyelesaikan ini? Terima kasih sebelumnya!

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 sumber


Jawaban (2)


Tampaknya fprintf tidak mengambil parameter (batas) seperti itu.

Anda dapat menentukan lebar dan presisi untuk string di printf. Presisinya, yang diberikan setelah suatu titik, akan memotong string jika lebih panjang:

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

akan mencetak paling banyak lima karakter data.

Anda dapat membuat variabel lebar dan presisi dengan menentukan tanda bintang. Kemudian printf mengharapkan parameter bilangan bulat untuk setiap bintang sebelum argumen aktual (string):

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

Perhatikan bahwa lebar dan presisi harus bertipe int. Jika perlu, masukkan parameter:

printf("%.*s\n", (int) k, data);      // k is size_t, say
person M Oehm    schedule 06.05.2016
comment
Saya menggunakan fprintf untuk menulis data dalam file .txt. Saya mengedit postingan dengan seluruh kode. Saya akan mencoba menggunakan ini di fprintf juga. - person Tony Tannous; 06.05.2016
comment
Tentu saja, formatnya sama untuk semua fungsi *printf. Satu-satunya perbedaan antara fprintf, sprintf dan printf adalah sink, yaitu tempat penulisan string yang diformat. - person M Oehm; 06.05.2016

Gunakan fwrite() alih-alih fprintf()

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

di mana k adalah parameter batas Anda

person Nick Schrock    schedule 06.05.2016