2016-01-17 3 views
0

Я копирую строку, но по какой-то причине строка копируется дважды.Не удается выяснить, почему строка копируется дважды

bool check(const char* word) { 
    // copy the word 
    char *copy = malloc(sizeof(word)); 
    strcpy(copy, word); 

    printf("word %s\n", word); 
    printf("copy %s\n", copy); 

    return false; 
} 

Выход этой функции

word myWord 
copy myWord 
myWord 

Если я удалить '\ п' символ в Printf для копирования, выходные изменения

word myWord 
copy myWordmyWord 

Я попытался прохождение этого кода с помощью отладчика, но отладчик показывает значение копии как «myWord»

Кто-нибудь может что может произойти здесь?

ответ

3

необходимо выделить strlen(word) + 1 байт. sizeof(word) возвращает количество байтов для хранения указателя.

+0

Это было! Я понимаю, что для нулевого символа недостаточно памяти, но как это слово печатается дважды? Согласно отладчику, слово и копия не смежны в памяти. – Hutch

+0

, если ваш отладчик имеет окно памяти, используйте его для просмотра байтов по выделенному адресу. шаг за кодом, чтобы увидеть, как это изменится. – jdigital

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