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