gpt4 book ai didi

c - 使用内存中的多个空字符操作 C 字符串

转载 作者:太空狗 更新时间:2023-10-29 14:54:13 26 4
gpt4 key购买 nike

我需要在一大块内存中搜索一串字符,但其中有几个字符串的每个字符都是空分隔的,如下所示:
“我..a.m..a..s.t.r.i.n.g”
所有的 '.' 都是空字符。我的问题来自实际将其存入内存。我尝试了几种方法,例如:

 char* str2; 
str2 = (char*)malloc(sizeof(char)*40);
memcpy((void*)str2, "123\0567\09abc", 12);

将以下内容放入str2指向的内存中:123.7.9abc..
有点像
str2 = "123456789\0abcde\054321";
将 str2 指向一个看起来像 123456789.abcde,321 的内存块,其中 '.'是一个空字符,',' 是一个实际的逗号。

很明显,将空字符插入 cstrings 并不像我想象的那样容易,就像插入换行符一样。我在尝试使用字符串库时也遇到了类似的困难。我可以做单独的作业,比如:

 char* str;    
str = (char*)malloc(sizeof(char)*40);
strcpy(str, "123");
strcpy(str+4, "abc");
strcpy(str+8, "ABC");

但这当然不是可取的,我相信问题在于我对 c 风格字符串如何存储在内存中的理解。显然,“abc\0123”实际上并没有作为 61 62 63 00 31 32 33(十六进制)进入内存。它是如何存储的,我该如何存储我需要的东西?

(我也为没有在 block 中设置代码而道歉,这是我第一次发布问题,不知何故“四间隔”显然比我能处理的更难。谢谢你,Luchian。我看到更多的换行符是需要。)

最佳答案

如果每隔一个 char 都包含一个空值,那么几乎可以肯定您实际上拥有 UTF-16 编码的字符串。相应地处理它们,您的问题就会消失。

假设您使用的是 Windows,其中 UTF-16 很常见,您将使用 wchar_t* 而不是 char* 来保存此类字符串。并且您将使用宽字符字符串处理函数来对此类数据进行操作。例如,使用wcscpy而不是strcpy等。

关于c - 使用内存中的多个空字符操作 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com