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为你分配了内存.我接受了解决这个问题的答案,因为这是我真正的问题,但我已经决定使用编译时字符串连接,因为这是一个非常好的技巧.
如果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)