2012-02-28 40 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'來做什麼......字符串已經被終止了,我相信這會影響現有的空終止符後的字節*。 – 2012-02-28 00:44:21

+0

'sizeof(char)'是1.爲什麼寫它? – 2012-02-28 00:44:39

+0

如果'strlen(str)== 10',那麼'str [10]'應該是NULL,而不是'str [11]'。 – 2012-02-28 00:44:48

回答

2

應行

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

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

只要你想創建一個結構上堆的空間,不只是一個指針。

+0

就是這樣。謝謝 – user994165 2012-02-28 01:27:32