C ++ std :: string length()或size()不适用于方法args

时间:2012-11-15 18:31:26

标签: c++ macos stdstring

我有一个方法,它从文件路径创建一个MatLab数组名称,并将其作为std :: string返回。生成的字符串将传递到另一个将名称写入文件的方法中。当我尝试获取传入的字符串的长度时,当字符串的长度为12或13个字符时,它显示0。

我的代码:

bool MyClass::masterMethod(std::string fileURI){

 FILE* dataStream;
 // Assume dataStream is set up correctly

 // Get arrayName from File URI
 std::string arrayName = this->makeArrayNameFromPath( fileURI);

 //Write array name to file
 this->writeArrayName(arrayName , dataStream)



}


std::string MyClass::makeArrayNameFromPath(std::string filePathURI){


std::string tempString = filePathURI.substr(filePathURI.find_last_of('/')+1); 

std::string returnString = "";

long index = 0;

for(long i = 0; i < tempString.length(); i++){

    if((tempString[i] != ' ') && (tempString[i] != '.')){

        returnString[index++] = tempString[i];
    }
}

return returnString;

}



void MyClass::writeArrayName(std::string name , FILE *nameStream){

 // long testLength = name.length();
 // long testLength2 = name.size();
 // const char* testChar = nam.c_str();
 // long testCharLen = strlen(testChar);    

// The size of the name is the number of Chars * sizeof(int8_t)
int32_t sizeOfName = (int32_t)(name.length() * sizeof(int8_t));
int32_t nameType = miINT8;

fwrite(&nameType , sizeof(int32_t) , 1 , nameStream);
fwrite(&sizeOfName, sizeof(sizeOfName), 1, nameStream);
fwrite(&name , sizeof(name[0]), sizeOfName , nameStream);   

}

所以我不确定为什么string :: length不起作用。如果创建一个std :: string test = name并打印它,我可以得到字符串的值,但不能得到它的长度或大小。 如果我使用const char * testName = name.c_str(); long test = strlen(testName),我得到了一个 正确的价值,但认为没有必要。

所以任何建议或建议都表示赞赏。

2 个答案:

答案 0 :(得分:4)

returnString[index++] = tempString[i];没有按照您的想法行事。它不会为字符串添加额外的空间或长度,只会覆盖字符串实际上不拥有的位置的内存。我认为returnString.append(1, tempString[i])或类似的应该这样做。

答案 1 :(得分:1)

你永远不会给字符串一个大小,只是试图分配不存在的位置。

尝试将此字符添加到返回值

returnString += tempString[i];