为什么此 运行 代码不打印字符串的最后一个值 /?

Why this running code don't print the last value of the string which is /?

我正在使用一个名为 ncdir 的路径(一个外部字符指针)用于其他文件来读取 netcdf 文件。

string temp = "/mnt/BIOPHY-RO/Model_AIFS/AIFS_LFN/";
ncdir = (char*) calloc (temp.length(),sizeof(char));
strcpy (ncdir, temp.c_str());
cout<<"last element of the string: "<<ncdir[sizeof(ncdir)]<<endl;

我希望输出 P 而不是 N(文字字符串中的最后一个字符)

对于初学者,您忘记为终止零保留内存

cdir = (char*) calloc (temp.length(),sizeof(char));

其次,表达式 sizeof(ncdir) 给出指针的大小 ncdir 而不是指向数组的大小。

考虑到字符串文字的最后一个符号是 '/' 而不是 'N'.

注意: 如果它实际上是 C++ 代码,那么使用运算符 new 代替标准 C 函数 calloc 来分配内存。

这是一个演示程序

#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: /