(C)如何在getenv()后包含目录路径?[duplicate]

cczfrluj  于 2023-03-07  发布在  其他
关注(0)|答案(2)|浏览(118)
    • 此问题在此处已有答案**:

(17个答案)
昨天关门了。
我一直在尝试弄清楚如何(在C语言中)将"getenv()"和"/filetest "放在一个字符中。
我认为你可以这样做:
char *file = getenv("HOME") + "/filetest";
但是,我似乎想不明白。
在那之后我试着去做:
char *file = getenv("HOME") && "/filetest";
但那也没用。
然后,我试着:

char *file1 = getenv("HOME");
char *file = file1 + "/filetest";

有人能告诉我我做错了什么吗?

kd3sttzy

kd3sttzy1#

分配一个足够大的缓冲区来保存这两个字符串,然后使用strcat()将string2连接到string1:

char buffer[BUFSIZ];

strcat (strcpy (buffer, getenv ("HOME"), "/filetest");

/* OR, more readable to modern eyes: */
strcpy (buffer, getenv ("HOME");
strcat (buffer, "/filetest");

/* OR */
unsigned offset = 0;

strcpy (buffer + offset, tmp);
offset += strlen (tmp);
strcpy (buffer + offset, "/filetest");

/* OR */
strcpy (buffer, tmp);
strcpy (buffer + strlen (tmp), "/filetest");

/* OR */
int n = snprintf (buffer, sizeof buffer, "%s", tmp);
snprintf (buffer + n, sizeof buffer - (size_t) n, "%s", "/filetest");

请注意,getenv()通过返回NULL指针常量来指示失败,代码应在调用strcpy()之前检查其结果。

char *tmp = getenv ("HOME");

if (!tmp) {
    complain ();
}
/* Now copy. */
pjngdqdw

pjngdqdw2#

在C语言中,字符串复制/连接由strcpy/strcat执行:
https://www.tutorialspoint.com/c_standard_library/c_function_strcpy.htmhttps://www.tutorialspoint.com/c_standard_library/c_function_strcat.htm

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char file[200];
    strcpy(file, getenv("HOME"));
    strcat(file, "/filetest");
    
    printf("%s", file);
    printf("\n\n");
    return 0;
}

相关问题