试图用snprintf添加两个字符串的Bug

Dol*_*rim 2 c string memory-management

我正在尝试用snprintf添加两个字符串,但显然我不知道我在做什么.

这是代码块:

char * filename = NULL;

(void)snprintf (filename, sizeof(filename), "%s/%s",
        PATH, FILE);  
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

char * filename = NULL;

(void)snprintf (filename, sizeof(PATH)+sizeof(FILE)+1, "%s/%s",
        PATH, FILE);  
Run Code Online (Sandbox Code Playgroud)

PATH和FILE是标头定义的字符串.有时,这段代码有效,偶尔也没有.我确定这是某种记忆问题,我做错了什么?

编辑:我的问题是出于某种原因认为snprintf为你分配了内存.我接受了解决这个问题的答案,因为这是我真正的问题,但我已经决定使用编译时字符串连接,因为这是一个非常好的技巧.

And*_*w Y 5

如果FILE和PATH在头文件中定义为字符串文字,那么你可以在编译时连接:

#include <stdio.h>
/* elsewhere in your headers */
#define FILE "foo.ext"
#define PATH "/dir/subdir"

/* After including those headers */
#define FULLPATH (PATH "/" FILE)

int main(int argc, char *argv[]) {
  printf("%s\n", FULLPATH);
}
Run Code Online (Sandbox Code Playgroud)

或者在声明变量时直接执行此操作并在代码中的其他位置引用它:

#include <stdio.h>

#define FILE "foo.ext"
#define PATH "/dir/subdir"

char fullpath[] = PATH "/" FILE;

int main(int argc, char *argv[]) {
  printf("%s occupies %d bytes\n", fullpath, sizeof(fullpath));
}
Run Code Online (Sandbox Code Playgroud)