【发布时间】:2011-05-17 03:04:09
【问题描述】:
我将一个 C 宏传递给一个以char * 形式接收它的函数。没有任何理由,宏中的最后一个字符会被截断。我怀疑有些内存泄漏,但找不到哪里。
#define FROM "/some/local/path/from/"
#define TO "/some/local/path/to/"
....
char file[_D_NAME_MAX + 1] = {'\0'};
....
funMove(file, FROM, TO);
....
....
int funMove(char *file, char *from, char *to) {
//here the to value is one character less (/some/local/path/to) slash got truncated
}
【问题讨论】:
-
你如何确定它被截断了?
-
不,对不起,不相信你。你要么喝醉了,要么(更有可能)有什么else是你没有向我们展示的错误:-)
-
向我们展示 C 预处理器的文本输出。
-
我们需要更多信息。
-
由于您没有显示任何动态内存分配,因此在此代码中泄漏不是问题。由于您没有展示您如何确定
to中的值被截断,因此我们无法评论该问题。要截断它,您必须有一个可修改的字符串(而不是只读字符串),并且必须修改字符串以用 NUL'\0'替换尾部斜杠。许多编译器将字符串文字放入文本(代码)段,因此这些字符串是不可修改的。
标签: c string memory memory-leaks macros