在发布此回答后,问题的标签已从C++更改为C。
使用std::string
,如下所示:
// "using namespace std;" or "using std::string;", then:
string const person = currentPerson;
old_c_function( person.c_str() );
如果你要在 C 语言级别上进行操作(我建议你不要这样做),首先应该用一个类型常量替换掉不必要的 #define
:
int const max_person_name_size = 50
然后将数组进行零初始化:
char person[max_person_name_size] = {}
(注意:这里没有愚蠢的memset。)
(还要注意:这个清零只是一种预防措施。你想要它,但并不是真正必要的,因为strcpy会确保一个尾随的零字节。)
然后只需复制字符串即可:
assert( strlen( current_person ) < max_person_name_size );
strcpy( person, current_person );
但不要这样做。使用
std::string
代替。
更新: 做其他事情几分钟后,我意识到这个答案和其他所有答案一样,都完全
不正确。OP在
其他地方的评论中表示:
"我在库中有一个只接受字符数组而不是字符指针的函数。
因此,显然这是一个误解。
唯一有意义的方式是如果该数组由函数修改,那么std::string::c_str()
就不是一个解决方案。但是,如果将其长度设置为足够满足C函数的长度,则仍然可以使用std::string
。可以这样做:
person.resize( max_person_name_size );
foo( &person[0] ); // Assuming foo modifies the array.
person.resize( strlen( person.c_str() ) );
std::string
? - Cheers and hth. - Alfstd::string
将const char*
参数传递到其他地方?你听说过std::string::c_str()
吗? - πάντα ῥεῖ