我正在将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
}
答案 0 :(得分:4)
您向我们展示的代码没有任何问题,因为以下工作正常:
#include <stdio.h>
#include <string.h>
#define _D_NAME_MAX 50
#define FROM "/some/local/path/from/"
#define TO "/some/local/path/to/"
char file[_D_NAME_MAX + 1] = {'\0'};
int funMove(char *file, char *from, char *to) {
printf ("[%s] [%s] [%s]\n", file, from, to);
return 0;
}
int main (void) {
strcpy (file, "fspec");
int x = funMove(file, FROM, TO);
printf ("[%d]\n", x);
return 0;
}
输出:
[fspec] [/some/local/path/from/] [/some/local/path/to/]
[0]
正如预期的那样,如果您看到to
被截断,则其他地方一定存在问题。
答案 1 :(得分:0)
道歉!!实际上,代码没有任何问题,宏没有被截断但被覆盖了。除了斜杠之外,还有另一个具有相同名称和内容的宏。因此,宏被替换而不是预期的宏。
#define TO "/some/local/path/to" //header file 1
#define TO "/some/local/path/to/" //header file 2
我只是考虑了头文件2并且误解了宏被截断了。实际上,使用头文件1中的宏而不是文件2,这是预期的文件。
感谢您的所有答案和支持。