2

我已经意识到我在 Python 中的编码速度比在 C 中快 17 倍,我想我有点假设我不是一个程序员,直到我真正考虑它并意识到唯一的问题是我可以'不处理 C 字符串/字符数组/字符指针/任何东西。我对它们有一个障碍,操纵它们需要我几个小时。我在 C++ 中没有这个问题。

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

4

4 回答 4

5

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

于 2012-10-04T00:24:39.427 回答
3

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。”

于 2012-10-04T00:27:37.320 回答
2

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

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

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

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

于 2012-10-04T01:34:09.040 回答
0

虽然并不总是需要重新发明轮子。我倾向于认为通过这样做,您可以更好地了解事物的运作方式。虽然,不确定您正在使用哪种类型的时间框架。否则,正如另一个答案中提到的,更好的字符串库是一个非常好的。

于 2012-10-04T00:27:33.747 回答