将变量添加到文件路径
adding a variable into a file path
我得到了用户 ID 以将其添加到文件路径。但是我在创建文件时遇到了问题。如何将用户标识添加到文件路径?我使用 strcpy
但这似乎不起作用。这是我的代码。
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
register struct passwd *pw;
register uid_t uid;
uid = geteuid ();
pw = getpwuid (uid);
char str[1000];
strcpy(str, "/home/" );
strcpy(str, pw->pw_name );
strcpy(str, "/Documents/test.txt" );
int openFile = creat(str, mode);
这是 snprintf 的一个很好的用途(在 stdio.h 中)。一行:
snprintf(str, 1000, "/home/%s/Documents/test.txt", pw->pw_name);
最好先验证 pw->pw_name 是否为 null。
您的多个 strcpy 不起作用的原因是您在每次调用时写入内存中的相同位置。
我不建议您这样做,但您可以使用 strcpy,前提是您在每次调用后都更新了指针。一个例子:
char *loc = str;
strcpy(loc, "/home/" );
loc += strlen("/home/");
strcpy(loc, pw->pw_name );
loc += strlen(pw->pw_name);
strcpy(loc, "/Documents/test.txt" );
但是,如果您选择了一个小缓冲区(比所有三个字符串的字符数加起来还要短 + 一个用于终止空值),这将是一个问题 — 缓冲区溢出。
snprintf 的好处是确保您不会超过该界限:
The functions snprintf() and vsnprintf() do not write more than size bytes (including the terminating null byte ('[=12=]')).
三次 strcpy() ?也许你想要:
strcpy(str, "/home/");
strcat(str, pw->pw_name);
strcat(str, "/Documents/test.txt");
?或者更好:
int ret;
ret = snprintf(str, sizeof str, "%s/%s/%s"
, "/home" , pw->pw_name, "Documents/test.txt");
if (ret >= sizeof str) {... error...}
我得到了用户 ID 以将其添加到文件路径。但是我在创建文件时遇到了问题。如何将用户标识添加到文件路径?我使用 strcpy
但这似乎不起作用。这是我的代码。
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
register struct passwd *pw;
register uid_t uid;
uid = geteuid ();
pw = getpwuid (uid);
char str[1000];
strcpy(str, "/home/" );
strcpy(str, pw->pw_name );
strcpy(str, "/Documents/test.txt" );
int openFile = creat(str, mode);
这是 snprintf 的一个很好的用途(在 stdio.h 中)。一行:
snprintf(str, 1000, "/home/%s/Documents/test.txt", pw->pw_name);
最好先验证 pw->pw_name 是否为 null。
您的多个 strcpy 不起作用的原因是您在每次调用时写入内存中的相同位置。
我不建议您这样做,但您可以使用 strcpy,前提是您在每次调用后都更新了指针。一个例子:
char *loc = str;
strcpy(loc, "/home/" );
loc += strlen("/home/");
strcpy(loc, pw->pw_name );
loc += strlen(pw->pw_name);
strcpy(loc, "/Documents/test.txt" );
但是,如果您选择了一个小缓冲区(比所有三个字符串的字符数加起来还要短 + 一个用于终止空值),这将是一个问题 — 缓冲区溢出。
snprintf 的好处是确保您不会超过该界限:
The functions snprintf() and vsnprintf() do not write more than size bytes (including the terminating null byte ('[=12=]')).
三次 strcpy() ?也许你想要:
strcpy(str, "/home/");
strcat(str, pw->pw_name);
strcat(str, "/Documents/test.txt");
?或者更好:
int ret;
ret = snprintf(str, sizeof str, "%s/%s/%s"
, "/home" , pw->pw_name, "Documents/test.txt");
if (ret >= sizeof str) {... error...}