我遇到了一個奇怪的字符串大小問題。這是我的示例代碼C++奇怪的字符串大小
sampleA
std::string getexepath()
{
char result[ PATH_MAX ];
int found;
ssize_t count = readlink("/proc/self/exe", result, PATH_MAX);
found = std::string(result).find_last_of("/");
std::string pp = std::string(result).substr(found+1);
std::string kk = std::string(result).substr(found+1);
std::cout << kk << kk.size() << std::endl;
return kk;
}
sampleB
std::string getexepath()
{
char result[ PATH_MAX ];
int found;
ssize_t count = readlink("/proc/self/exe", result, PATH_MAX);
found = std::string(result).find_last_of("/");
//std::string pp = std::string(result).substr(found+1);
std::string kk = std::string(result).substr(found+1);
std::cout << kk << kk.size() << std::endl;
return kk;
}
的輸出是不同的; sampleB輸出比sampleA多2個字符。我猜想區別是'\0'
; sampleB輸出包括'\0'
,而sampleA不包含。
我想知道是什麼原因造成的問題。 審查答案後,現在我知道我錯過了'\ 0'。但我仍然想知道爲什麼添加此語句「std :: string pp = std :: string(result).substr(found + 1)」將導致不同的結果。
謝謝
['readlink()'](http://linux.die.net/man/2/readlink)的文檔聲明:「readlink()不會向buf追加空字節。」所以我很好奇。在使用它構造'std :: string'之前,注意所描述的功能並設置'result [count] = 0;'*是否有意義? (假設你實際檢查結果不是(-1),你現在*不*這樣做)。 – WhozCraig
文本'sampleA'和'sampleB'是否字面上出現在您的代碼中? – user2357112
難道你真的不想設置'result [count]',並且使緩衝區1字符變大嗎? – user2357112