Для начала вы забыли зарезервировать память для конечного нуля
cdir = (char*) calloc (temp.length(),sizeof(char));
А во-вторых, выражение sizeof(ncdir)
дает размер указателя ncdir
, а не размер указанного массива.
Учтите, что последним символом строкового литерала является '/'
bur, а не 'N'
.
Примечание:
Если на самом деле это код C ++, то вместо стандартной функции C calloc
используйте оператор new
для выделения памяти.
Вот демонстрационная программа
#include <iostream>
#include <string>
#include <cstring>
int main()
{
std::string temp = "/mnt/BIOPHY-RO/Model_AIFS/AIFS_LFN/";
char *ncdir = new char[temp.size() + 1];
std::strcpy ( ncdir, temp.c_str() );
std::cout << "last element of the string: " << ncdir[std::strlen( ncdir ) -1] << std::endl;
delete [] ncdir;
}
Его вывод
last element of the string: /