0

ファイル パスから 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)、正しい値を取得しましたが、それは必要ないと思いました。

したがって、アドバイスや提案は大歓迎です。

4

2 に答える 2

1

そこにない位置を割り当てようとするだけで、文字列にサイズを指定することはありません。

代わりにこれを試して、戻り値に文字を追加してください

returnString += tempString[i];
于 2012-11-15T18:35:31.453 に答える