所以,我想更好地掌握C++中的字符串文字是如何工作的.我主要关注的是你将字符串文字的地址分配给指针并传递它的情况.例如:
char* advice = "Don't stick your hands in the toaster.";
Run Code Online (Sandbox Code Playgroud)
现在让我说我只是通过在程序的持续时间内复制指针来传递这个字符串.当然,这可能不是一个好主意,但我很好奇幕后会发生什么.
再举一个例子,假设我们创建一个返回字符串文字的函数:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说这个函数经常调用,字符串文字只用了大约一半的时间:
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,实际发生了什么?字符串刚刚创建但未使用,并且从未取消分配?
在第二种情况下,只要用户发现需要它,字符串是否会被维护?当不再需要它时会发生什么......那个存储器会被释放(假设没有任何东西指向那个空间)?
不要误解我的意思,我不打算像这样使用字符串文字.我打算使用容器来检查我的字符串(可能是std :: string).我大多只是想知道这些情况是否会导致内存管理或数据损坏的问题.
我的同事和我正在调试他正在处理的WCF服务中的问题,其中字符串的长度未被正确评估.他正在运行此方法来对其WCF服务中的方法进行单元测试:
// Unit test method
public void RemoveAppGroupTest()
{
string addGroup = "TestGroup";
string status = string.Empty;
string message = string.Empty;
appActiveDirectoryServicesClient.RemoveAppGroup("AOD", addGroup, ref status, ref message);
}
// Inside the WCF service
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public void RemoveAppGroup(string AppName, string GroupName, ref string Status, ref string Message)
{
string accessOnDemandDomain = "MyDomain";
RemoveAppGroupFromDomain(AppName, accessOnDemandDomain, GroupName, ref Status, ref Message);
}
public AppActiveDirectoryDomain(string AppName, string DomainName)
{
if (string.IsNullOrEmpty(AppName))
{
throw new ArgumentNullException("AppName", "You must specify an application name");
} …Run Code Online (Sandbox Code Playgroud) 我正在研究代理服务器.我正在获取数据byte[],我将其转换为String执行某些操作.现在当我将这个新的转换String回byte[]它时会导致未知问题.
所以主要是因为我需要知道如何正确地将a转换byte[]为a String然后再转换为a byte[].
我试图将转换byte[]为String然后再转换回来byte[](以确保它不是我的操作导致问题).
所以它就像:
// where reply is a byte[]
String str= new String(reply,0, bytesRead);
streamToClient.write(str.getBytes(), 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)
不等于
streamToClient.write(reply, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)
我的代理工作正常,当我发送byte[]没有任何转换,但当我将其转换byte[]为a String然后回到byte[]它导致问题.
有人可以帮忙吗?=]
根据我对PHP的了解,以下语法不合法:
if ($s == Yes)
Run Code Online (Sandbox Code Playgroud)
它应该写成:
if ($s == 'Yes')
Run Code Online (Sandbox Code Playgroud)
但是,第一个例子工作正常.谁知道为什么?
在同一主题上也提出了类似的问题(在那里进行了良好的速度比较).希望这个问题不同,并更新到Python 2.6和3.0.
到目前为止,我认为更快,最兼容的方法(在不同的Python版本中)是简单的简单+符号:
text = "whatever" + " you " + SAY
Run Code Online (Sandbox Code Playgroud)
但我一直听到并且阅读它并不安全和/或可取.
我甚至不确定有多少方法可以操纵字符串!我能数只有约4:有插值及其所有子选项,如%和format,然后有简单的,join和+.
最后,新的方法,以字符串格式化,这与format,肯定是不好的在同一时间向后兼容性使得%向前兼容性不好.但是,每当我们将自己限制在3.x时,它是否应该用于每个字符串操作,包括每个连接?
好吧,也许这更像是一个维基而不是一个问题,但我确实希望得到一个答案,即每个字符串操作方法的正确用法.哪一个可以通常用于每个焦点(最好的兼容性,速度和安全性).
谢谢.
编辑:我不确定我是否应该接受答案,如果我觉得它没有真正回答这个问题......但我的观点是,他们所有人都在一起做了一份正确的工作.
丹尼尔投票最多的答案实际上是我更愿意接受的答案,如果不是"笔记"的话.我非常不同意"连接是严格使用+运算符来连接字符串",因为,对于一个,join也会进行字符串连接,我们可以为此构建任意库.
目前所有3个答案都是有价值的,我宁愿将一些答案混合在一起.虽然没有人自愿这样做,但我想通过选择较少投票的人(但比THC4k更广泛,这更像是一个大而且非常受欢迎的评论)我也可以引起对其他人的关注.
我正在使用此代码查找计算机的MAC地址.此代码直接打印MAC地址,但我想将其作为字符串返回.我完全糊涂了.
请帮忙.
try {
InetAddress add = InetAddress.getByName("10.123.96.102");
NetworkInterface ni1 = NetworkInterface.getByInetAddress(add);
if (ni1 != null) {
byte[] mac1 = ni1.getHardwareAddress();
if (mac1 != null) {
for (int k = 0; k < mac1.length; k++) {
System.out.format("%02X%s", mac1[k], (k < mac1.length - 1) ? "-" : "");
}
} else {
System.out.println("Address doesn't exist ");
}
System.out.println();
} else {
System.out.println("address is not found.");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 假设我有这个:
我---太阳 - 是------甚大---.
我想用一个连字符替换所有多个连字符.
我想实现一个简单的替换密码来掩盖URL中的私有ID.
我知道我的ID会是什么样子(大写ASCII字母,数字和下划线的组合),它们会很长,因为它们是组合键.我想使用更长的字母来缩短生成的代码(我想使用大写和小写的ASCII字母,数字和其他内容).所以我输入的字母表就是
[A-Z0-9_] (37 chars)
Run Code Online (Sandbox Code Playgroud)
我的外传字母表将是
[A-Za-z0-9] (62 chars)
Run Code Online (Sandbox Code Playgroud)
因此可以获得几乎50%合理压缩量的压缩.
假设我的网址如下所示:
/my/page/GFZHFFFZFZTFZTF_24_F34
Run Code Online (Sandbox Code Playgroud)
而我希望它们看起来像这样:
/my/page/Ft32zfegZFV5
Run Code Online (Sandbox Code Playgroud)
显然,两个数组都会被洗牌以带来一些随机顺序.
这不一定是安全的.如果有人弄清楚:很好,但我不希望这个计划显而易见.
我想要的解决方案是将字符串转换为基数37的整数表示,将基数转换为62并使用第二个字母表来写出该数字.是否有任何类似的示例代码?Integer.parseInt()有一些类似的逻辑,但硬编码使用标准数字行为.
有任何想法吗?
我使用Java来实现这一点,但任何其他语言的代码或伪代码当然也很有帮助.
有一串空格:
string *str = new string();
str->resize(width,' ');
Run Code Online (Sandbox Code Playgroud)
我想在一个位置填充长度字符.
在C中它看起来像
memset(&str[pos],'#', length );
Run Code Online (Sandbox Code Playgroud)
我怎么能用c ++字符串实现这一点,我试过了
string& assign( const string& str, size_type index, size_type len );
Run Code Online (Sandbox Code Playgroud)
但这似乎截断了原始字符串.有一种简单的C++方法吗?谢谢.