[英]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.