[英]Declaring length of an array with a strlen function
我正在制作一個程序來打印您的姓名首字母(例如,名稱:Ben vdr Output:BVDR),並且在處理此數組時遇到了麻煩
string s[strlen(s)] = get_string();
我收到此錯誤
initials.c:8:21:錯誤:使用未聲明的標識符's'字符串s [strlen(s)] = get_string();
我將如何工作?
該代碼沒有任何意義。
s
變量遮蓋了其他 s
,還是 s
然后再對其進行適當范圍划分(必須在等號之后 ) strlen()
適用於C字符串,而不適用於std::string
。正如MM提到的,如果你只得到一個字符串,做到這一點:
char* s = get_string(); // get_string() malloc()s a proper char array
...
free( s );
如果您想聲明一個字符串數組 ,請這樣做並正確初始化該數組:
const unsigned N = 100;
char* s[ N ] = { get_string(), "" }; // first elt is copy, all others are empties
要么
char* s[ N ] = { get_string() }; // N copies of result
再次提醒您,不要忘記對字符串進行一次完全free()調用:
free( s[0] );
如果要為c-string中s
每個字符創建一個字符串數組,則必須分多個步驟進行。
char* p = get_string();
char* ss[ strlen( p ) ] = { NULL }; // VLA
...
free( p );
要么
char* p = get_string();
char** ss = malloc( strlen( p ) * sizeof( char* ) ); // dynamic
...
free( ss );
free( p );
聲明數組時,必須知道數組的長度。 同樣,不能從函數返回數組。
通常,輸入未知長度字符串的方法是在get_string
函數內部使用動態分配。 然后,該函數返回一個指向動態分配的塊的第一個字符的指針。
調用代碼如下:
char *s = get_string();
// ... use s ...
free(s); // release the dynamically allocated block
在聲明s
之前(或之前),無法獲得s
的長度。 您可能想要執行以下操作:
string tmp = get_string();
string s[strlen(tmp)] = tmp;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.