fprintf เพื่อเขียน k ตัวอักษรแรกลงในบัฟเฟอร์

ฉันได้รับเส้นทางไปยังไฟล์ที่ฉันควรแก้ไข ไม่ว่าจะเพิ่มข้อมูลลงในไฟล์ หรือแทนที่ข้อมูลใน file.txt

ฉันยังได้รับขีดจำกัดด้วย หากมี 100 ตัวอักษรในสตริงที่ชี้โดย data และขีดจำกัดคือ 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 คาดว่าจะมีพารามิเตอร์จำนวนเต็มสำหรับแต่ละดาวก่อนอาร์กิวเมนต์ actzual (สตริง):

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 คือ sink นั่นคือตำแหน่งที่เขียนสตริงที่จัดรูปแบบแล้ว - person M Oehm; 06.05.2016

ใช้ fwrite() แทน fprintf()

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

โดยที่ k คือพารามิเตอร์ขีดจำกัดของคุณ

person Nick Schrock    schedule 06.05.2016