使用strlen函数声明数组的长度

时间:2017-11-03 00:06:45

标签: c arrays

我正在制作一个程序来打印您的姓名缩写(例如姓名:Ben vdr输出:BVDR)并且在使用此数组时出现问题

string s[strlen(s)] = get_string();

我收到此错误

  

initials.c:8:21:错误:使用未声明的标识符' s'       string s [strlen(s)] = get_string();

我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:0)

代码毫无意义。

  • VLA是无效的C ++ (哎呀,你用的是C)
  • 要么使用新的s变量遮挡某些其他 s,要么
  • 您正在尝试使用s才能正确确定范围(必须之后等号)
  • 数组是零索引的,因此分配给100个元素数组的元素100是fencepost错误。
  • strlen()适用于C字符串,而不是std::string(同上)

M.M 所述,如果您只获取单个字符串,请执行以下操作:

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( 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 );

答案 1 :(得分:0)

在声明数组时必须知道数组的长度。此外,无法从函数返回数组。

通常,输入未知长度的字符串的方法是在get_string函数内使用动态分配。然后该函数返回一个指向动态分配块的第一个字符的指针。

调用代码如下:

char *s = get_string();
// ... use s ...
free(s);   // release the dynamically allocated block

答案 2 :(得分:-3)

在声明之前(或作为),您无法获得s的长度。你可能想做类似的事情:

string tmp = get_string();
string s[strlen(tmp)] = tmp;