在C中使用字符串有哪些第三方选项?

我已经知道有一段时间我在Python中编码的速度比在C中快17倍,我想我有点假设我不是一个程序员,直到我真正想到它并意识到唯一的问题是我能够处理C字符串/字符数组/字符指针/无论如何。 我对它们有一个阻碍,操纵它们需要几个小时。 我在C ++中没有这个问题。

但生活迫使我现在用纯C编码,我试图找到是否有一些我可以添加的第三方库,这将使我的生活更轻松。 我做了一些谷歌搜索,我真的没有找到太多。 我开始考虑自己做,但我觉得我要重新发明轮子。 肯定有什么东西在那里? 有谁知道这样的事情? 在这方面使C更像C ++的东西。 我意识到这是一个愚蠢的想法,因为这是C ++的重点,但你理解,我敢肯定。

有一个更好的字符串库 ,它是一个纯C库,用于处理“字符串”,试图避免标准C字符串处理的许多问题。

http://developer.gnome.org/glib/2.34/glib-utilities.html

http://developer.gnome.org/glib/2.34/glib-Strings.html

它是gnome的基础,但我认为你可以独立于gnome使用它。 根据概述页面,“它适用于许多类UNIX平台,以及Windows和OS X.”

您可以通过阅读SO上的相关问题来开始解决指针/数组/字符串问题。 这些问题不乏。

为了编写包含指针/数组/字符串的正确C代码,您必须学习和理解一些重要的事项:

  1. 指针,数组,指针指针,数组指针,数组数组,指针数组等的声明。 对于没有经验的人来说,C声明确实很奇怪。 但是,它们是可以学习的,并且有一些像cdecl这样的工具可以快速将abracadabrish声明翻译成简单的英语或反过来。
  2. 如果你看到一个函数将其中一个参数声明为一个数组(例如void f(int a[]) ),那就不要相信你的眼睛了。 它是一个指针,而不是一个数组。 在C中,数组永远不会作为函数参数传递。 只传递指针。 语法具有欺骗性,C的创建者对此类事情表示遗憾,但现在这些都是历史。 你无法改变它。
  3. 在所有C表达式中(不要与声明和定义混淆),除了一个,数组表现为指向其第一个元素的指针。 sizeof运算符是个例外。 sizeof(array)将返回chars的真实数组大小。 但是当你执行sizeof(array+0) ,你已经将array转换为指向array[0]的指针类型的表达式,在这种情况下, sizeof将返回指针的大小。
  4. 您无法分配数组。 您可以在定义它们时初始化它们,您可以复制它们,但在定义它们之后不能使用=赋值。
  5. C中没有基本类型的字符串。 只有charschars数组和chars指针以及指向chars数组的指针,我们经常将它们全部称为字符串,但它们实际上并非如此。 你看到的字符串,例如"I am a string. Or maybe I'm not." 被称为字符串文字,在某处有一个与之关联的chars数组。 我在某处说,因为字符串文字在不同的上下文中表现不同。 在所有C表达式中(不要与声明/定义混淆),除了大约一个,字符串文字表现为指向包含文字文本的数组的第一个char的指针。 sizeof例外是sizeof 。 它会返回像sizeof("ABC")这样的基础chars数组的sizeof("ABC") 。 再次,就像数组一样,当你写sizeof("ABC"+0) ,你已经将"ABC"转换为指向char的指针,而sizeof将返回指针的大小。
  6. 您不能尝试修改由字符串文字创建的char数组: "ABC"[0] = 'Z'; 是未定义的行为。 char* p = "ABC"; p[0] = 'Z'; char* p = "ABC"; p[0] = 'Z'; 或等效的char* p = "ABC"; *p = 'Z'; char* p = "ABC"; *p = 'Z';
  7. 您可以使用字符串文字来初始化chars数组或指向chars指针(您也可以将字符串文字分配给指针,但不能分配给数组,数组不可分配,如前所述)。 发生什么取决于你正在初始化什么。 在char a[] = "Hello"; 或者在char a[] = { "Hello!" }; char a[] = { "Hello!" }; 您创建一个chars数组,并将其内容设置为字符串文字中的文本。 如果需要,您可以在之后修改该数组。 在char* p = "World!"; 您创建一个包含文字字符串文本的char数组,并创建指向指向该数组的第一个char指针。 在这种情况下,你不能像我之前指出的那样改变数组。
  8. 由空格分隔的两个或多个相邻的字符串文字合并为一个: "Hello" " World!""Hello World!"
  9. 还有指针算术,但很容易。

这是关于它的。 主声明,表达式和函数参数中的主数组,观察字符串文字。

虽然不总是需要重新发明轮子。 我倾向于认为,通过这样做,您可以更好地理解事物的运作方式。 但是,不确定你正在使用什么类型的时间框架。否则,如另一个答案中所提到的,Better String Library是一个非常好的。