2012-02-28 5 views
1

снабжать струной, тетивой и т.п. Я эти переменные установлены в моем отладчика:Невозможно скопировать

значения // Отладчик не код

RELATIVE_PATH = "./bin/Debug"

STRLEN (RELATIVE_PATH) = 11

RELATIVE_PATH [11] = 0 '\ 000' // Как показано в Eclipse, отладчик

в моем коде я тогда делать:

//**My Code** 
struct dirs_later { 
    const char *findme; 
    struct dirent *dptr; 
    struct stat this_lstat; 
    char *relative_path; 
    const char *type_str; 
    DIR * dir; 
}; 

.... 
struct dirs_later *new_dir = malloc(sizeof(struct dirs_later*)); 
... 
char *relative_path2 = strdup(relative_path); 
if (NULL != new_dir) { 
    new_dir->findme = findme; 
    new_dir->dptr = dptr; 
    new_dir->this_lstat = *this_lstat; 
    new_dir->relative_path = relative_path2; 
    new_dir->type_str = type_str; 
    } 

, но затем отладчик показывает после new_dir-> relative_path = relative_path2. Затем в отладчике:

значения // Отладчик не код

relative_path2 = "& \ 275 \ 001" и

StrLen (relative_path2) = 3

Я также попытался это в моем коде вместо:

//**My Code** 
char *relative_path2 = malloc(strlen(relative_path) + 1 * sizeof(char)); 
//check for NULL 
strcpy(relative_path2, relative_path); 

и я получаю тот же результат

+0

Не уверен, что вы пытаетесь сделать с 'relative_path [11] = \ 0' .. строка будет завершена уже, и я считаю, что это повлияет на байты * после * существующего нулевого терминатора. –

+0

'sizeof (char)' равно 1. Зачем писать? –

+0

Если 'strlen (str) == 10', то' str [10] 'должно быть NULL, а не' str [11] '. –

ответ

2

Если линия

struct dirs_later *new_dir = malloc(sizeof(struct dirs_later*)); 

быть

struct dirs_later *new_dir = malloc(sizeof(struct dirs_later)); 

, как вы хотите, чтобы создать пространство в куче для структуры, а не только указатель.

+0

Вот и все. благодаря – user994165

Смежные вопросы