我正在尝试使用 snprintf 添加两个字符串,但显然我不知道自己在做什么。
这是代码块:
char * filename = NULL;
(void)snprintf (filename, sizeof(filename), "%s/%s",
PATH, FILE);
我也试过:
char * filename = NULL;
(void)snprintf (filename, sizeof(PATH)+sizeof(FILE)+1, "%s/%s",
PATH, FILE);
PATH 和 FILE 是 header 定义的字符串。有时,此代码有效,有时无效。我确定这是某种内存问题,我做错了什么?
编辑: 我的问题是出于某种原因认为 snprintf 为您分配了内存。我接受解决这个问题的答案,因为这是我真正的问题,但我决定使用编译时字符串连接,因为这是一个非常好的技巧。
最佳答案
如果 FILE 和 PATH 在 header 中定义为字符串文字,那么您可以在编译时连接:
#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);
}
或者在声明变量时直接执行并在代码的其他地方引用它:
#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));
}
关于c - 尝试使用 snprintf 添加两个字符串时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1155346/