【发布时间】:2021-06-15 01:00:57
【问题描述】:
我无法弄清楚如何从命令行参数获取路径并让我的程序使用 fprinf 写入该文件夹。例如:/here 会将文件写入“here”文件夹,其中 /here 是从程序所在位置到需要写入的位置的路径。如果路径是 /there/here,则相同。这只是我的代码的这一部分:
void write_file(int sockfd, char* path)
{
int n;
FILE *fp;
char filename[] = "file1.txt";
char buffer[SIZE];
fp = fopen(filename, "w");
if (fp == NULL)
{
std::cerr << "ERROR: Could not write file.\n";
exit(EXIT_FAILURE);
}
while (1)
{
n = recv(sockfd, buffer, SIZE, 0);
if (n <= 0)
{
break;
return;
}
fprintf(fp, "%s", buffer);
bzero(buffer, SIZE);
}
fclose(fp);
return;
}
此代码有效,但将文件保存在我当前的文件夹中。变量“path”是命令行参数。
编辑:这是不将行打印到文件的代码。相反,它从现有文件中复制行并将这些行放入“file1.txt”文件中。
【问题讨论】:
-
你知道
snprintf吗?您可以使用它来构造包含多个值的字符串,就像其他两个格式化为%s/%s的字符串一样。 -
另外,
fprintf(fp, "%s", buffer);有点危险...您确定buffer中的内容将是一个null 终止字符串? -
@Someprogrammerdude 我将如何使用 snprintf,因为它不接受打开的文件作为参数
-
有人理解这个问题吗?我认为问题不在于使用
frprintf,而是了解不同路径/目录:可执行文件、运行位置和绝对相对路径的影响。 -
而且很可能缺少终止零是一个问题。
标签: c++ file path format printf