我要檢查,如果一個char *指向一個有效的字符串...我可以檢查這個變量...C++ - 如何檢查char *是否指向有效的東西?
char* c;
我的嘗試:
if(c == NULL) //c is not null
if(*c == '\0') //false
if(strlen(c) == 0) //exception
我認爲這是不可能的檢查一個字符*時,它沒有分配,並不指向一個有效的字符串...
我要檢查,如果一個char *指向一個有效的字符串...我可以檢查這個變量...C++ - 如何檢查char *是否指向有效的東西?
char* c;
我的嘗試:
if(c == NULL) //c is not null
if(*c == '\0') //false
if(strlen(c) == 0) //exception
我認爲這是不可能的檢查一個字符*時,它沒有分配,並不指向一個有效的字符串...
這取決於操作系統。在Windows下,您有IsBadXxxPtr()
函數系列,它將測試指向有效內存的指針,儘管它們不會測試指針是否是特定類型的有效實例。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366713(v=vs.85).aspx 等
請不要推薦'CrashProgramRandomly'系列函數。 https://blogs.msdn.com/themes/blogs/generic/post.aspx?WeblogApp=oldnewthing&y=2006&m=09&d=27&WeblogPostID=773741&GroupKeys= –
這些功能k.own是危險的。在任何情況下都不要使用它們。 –
事實是,你永遠不能肯定一個指針是有效的。測試NULL可能會讓你確定它是無效的,但它不保證任何有效性。這是在C++中不使用這種事情的一個原因。 A std::string
是總是處於有效狀態。
哦,我寫錯了什麼?或者一個壞主意? –
如果你有一個上限字符串的大小,你希望:
char * c = new char[size];
那麼也許你可以檢查它是否內綁定終止:
bool is_valid(char *c, size_t size) {
while (size--) if (*c) return true;
return false;
}
另一種方法是封裝char *在構造函數的類中,或者在這樣的類中擁有有效的標誌。
c可以指向任何地方。這可能是空終止的字符串,不終止空字節的字符串,任何可訪問的二進制數據或任何不可訪問的地址。你想要檢查什麼,爲什麼?如果你想區分一個有效的字符串和一個未初始化的字符串,你通常會對未初始化的情況使用NULL,並檢查c == NULL。如果c不是一個有效的指針,訪問* c(strlen也是這樣做)不正確。所以一個典型的用例就是這樣的:
// initializing to NULL
char *c = NULL;
// maybe setting value
if(condition)
c = strdup("mein string");
// cleanup
if(c != NULL) {
free(c);
c = NULL;
}
爲什麼要檢查一個未初始化的指針的值? –
我解決我的問題有這樣: 的字符*是一個成員變量...所以我在構造函數中指定: 會議::會議() :C(0){} 現在如果字符*沒有分配我可以 如果(0!= C){/ *分配* /} –