在我的一个程序中,我必须与一些可用的遗留代码进行交互const char*.
可以说我的结构看起来像:
struct Foo
{
const char* server;
const char* name;
};
Run Code Online (Sandbox Code Playgroud)
我的高级应用程序只处理std::string,所以我想用std::string::c_str()回来const char*指针.
但是它的寿命是c_str()多少?
我可以做这样的事情而不面对未定义的行为吗?
{
std::string server = "my_server";
std::string name = "my_name";
Foo foo;
foo.server = server.c_str();
foo.name = name.c_str();
// We use foo
use_foo(foo);
// Foo is about to be destroyed, before name and server
}
Run Code Online (Sandbox Code Playgroud)
或者我应该立即将结果复制c_str()到另一个地方?
谢谢.
CString非常方便,同时std::string与STL容器更兼容.我在用hash_map.但是,hash_map不支持CString作为键,所以我想转换CString成std::string.
编写CString哈希函数似乎需要花费很多时间.
CString -----> std::string
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
std::string -----> CString:
inline CString toCString(std::string const& str)
{
return CString(str.c_str());
}
Run Code Online (Sandbox Code Playgroud)
我对吗?
编辑:
以下是更多问题:
我怎么能转换wstring,CString彼此?
//wstring -> CString,
std::wstring src;
CString result(src.c_str());
//CString->wstring.
CString src;
::std::wstring des(src.GetString());
Run Code Online (Sandbox Code Playgroud)
有什么问题吗?
我怎么能转换std::wstring,std::string彼此?
我很想知道如何实现std :: string以及它与c字符串的区别?如果标准没有指定任何实现,那么任何带有解释的实现都会很好,它如何满足标准给出的字符串要求?
我想知道的区别str == NULL和str[0] == '\0':
int convert_to_float(char *str, double *num)
{
if ((str == NULL) || (str[0] == '\0'))
return(-1);
*num = strtod(str, (char **)NULL);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我在Linux上使用gcc.
将C风格的字符串转换为C++的最佳方法是什么std::string?过去我用stringstreams 做过.有没有更好的办法?
"T"在字符串中表示什么.例如_T("Hello").我在需要unicode支持的项目中看到了这个.它实际告诉处理器的是什么
在Swift中使用标准C库函数时,我在传递C字符串时遇到了问题.作为一个简单的例子(仅用于演示问题),标准C库函数
char * strdup(const char *s1);
Run Code Online (Sandbox Code Playgroud)
接触Swift作为
func strdup(_: CString) -> UnsafePointer<CChar>
Run Code Online (Sandbox Code Playgroud)
这意味着返回值strdup()不能传递给另一个strdup()调用:
let s1 : CString = "abc"
let s2 = strdup(s1) // OK, s2 is a UnsafePointer<CChar>
let s3 = strdup(s2) // error: could not find an overload for '__conversion' that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何CString从a 创建一个Swift UnsafePointer<CChar>,以便一个标准库函数返回的C字符串可以传递给另一个函数?
我能找到的唯一方法是(使用Swift语言中如何将字符串转换为CString的代码?):
let s2a = String.fromCString(s2).bridgeToObjectiveC().UTF8String
let s3 = strdup(s2a)
Run Code Online (Sandbox Code Playgroud)
但我认为这并不令人满意,原因有两个:
备注/背景:当然,使用Swift String …
为什么此代码会产生运行时问题:
char stuff[100];
strcat(stuff,"hi ");
strcat(stuff,"there");
Run Code Online (Sandbox Code Playgroud)
但这不是吗?
char stuff[100];
strcpy(stuff,"hi ");
strcat(stuff,"there");
Run Code Online (Sandbox Code Playgroud) 谁能帮帮我吗?我需要删除C中的第一个字符char *.
例如, char * contents包含一个'\n'字符作为数组中的第一个字符.我需要检测并消除这个字符,在它被"消毒"后修改原始变量.
任何人都可以帮我代码吗?我对C完全不熟悉,似乎无法弄明白.