温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

c#中的string是不能修改的吗

发布时间:2021-08-25 17:23:19 来源:亿速云 阅读:352 作者:chen 栏目:编程语言

这篇文章主要讲解了“c#中的string是不能修改的吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#中的string是不能修改的吗”吧!

这个问题,应该不是问题吧!在C#中string是不可修改的,语法都是这么说的。但我今天想变通一种方式将原始的string内容修改,思路如下:

c++:

void editstring(wchar_t * ptr)
{	
	wchar_t* pc = ptr;
	int index = 0;	
	int len = _tcslen(ptr);//因为C#中传过来的是unicode字符,所以strlen只能==1
	while (index < len)
	{
		if (*pc != 0)
		{
			*pc = *pc + 1;
			pc++;
		}
		index++;
	}
}

c#中:注意:因为c#用的字符串是unicode,比如'a'-->0x00 0x41 ,而不是普通C++中的char,必须要是wchar_t,但我在C#中无法用wchar_t,只能用char

[Dllimport.....]
public static unsafe extern editstring(char* ptr); 


string msg = "abc";
            unsafe 
            {
                fixed(char *pmsg = msg) 
                {
                    editstring(pmsg);
                }
            }
            Console.WriteLine("msg=" + msg);

实验显示如下:

msg=bcd

说明实验成功。

上面做法是使用了fixed语句,那能不能不用fixed达到同样的目的呢?

C++代码不用变,只需要变C#代码:

[DllImport("dllfordebugdemo.dll", EntryPoint = "editstring", CallingConvention = CallingConvention.Cdecl)]
        public static extern void editstring(IntPtr ptr);

 string msg = "abc";
            unsafe 
            {
                fixed(char *pmsg = msg) 
                {
                    IntPtr pm = (IntPtr)pmsg;
                    editstring2(pm);
                }
            }
            Console.WriteLine("msg=" + msg);

最终实验也成功了。

感谢各位的阅读,以上就是“c#中的string是不能修改的吗”的内容了,经过本文的学习后,相信大家对c#中的string是不能修改的吗这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI