簡體   English   中英

用strlen函數聲明數組的長度

[英]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();

我將如何工作?

該代碼沒有任何意義。

  • VLA不是有效的C ++ (糟糕,您使用的是C)
  • 您是用新的s變量遮蓋了其他 s ,還是
  • 您正在嘗試先使用s然后再對其進行適當范圍划分(必須等號之后
  • 數組的索引為零,因此將100個元素的數組的元素100分配給籬笆牆錯誤。
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM