fprintf写入缓冲区的第一个k字符

时间:2016-05-06 18:50:00

标签: c buffer stdin

我给出了一个我应该修改的文件的路径,无论是将数据添加到文件中,还是覆盖file.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
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用fwrite()代替fprintf()

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

其中k是您的限制参数