为什么C宏会被截断?

时间:2011-05-17 03:04:10

标签: c string memory memory-leaks macros

我正在将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
}

2 个答案:

答案 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,这是预期的文件。

感谢您的所有答案和支持。