Почему C Macro обрезается? - PullRequest
0 голосов
/ 17 мая 2011

Я передаю макрос 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 ]

4 голосов
/ 17 мая 2011

Нет ничего плохого в коде, который вы нам показали, так как следующее прекрасно работает:

#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 усеченным.

0 голосов
/ 23 мая 2011

Извиняюсь !!На самом деле, с кодом ничего не случилось, и макрос не обрезался, а переопределялся.Был еще один макрос с тем же именем и содержанием, кроме косой черты.Итак, макрос был заменен вместо намеченного.

#define TO "/some/local/path/to" //header file 1
#define TO "/some/local/path/to/" //header file 2

Я просто имел в виду файл заголовка 2 и неправильно понял, что макрос был усечен.На самом деле, макрос из заголовочного файла 1 был использован вместо файла 2, который был намеченным.

Спасибо за все ваши ответы и поддержку.

...