我已经知道有一段时间我在Python中的编码速度比在C中快17倍,我想我有点认为我不是一个程序员,直到我真正想到它并意识到唯一的问题是我无法处理C strings / char数组/ char指针/无论如何。我对它们有一个阻碍,操纵它们需要我几个小时。我在C ++中没有这个问题。
但是生活迫使我现在用纯C编码,我试图找到是否有一些我可以添加的第三方库,这将使我的生活更轻松。我做了一些谷歌搜索,我真的没有找到太多。我开始考虑自己做,但我觉得我要重新发明轮子。肯定有什么东西在那里?有谁知道这样的事情?在这方面使C更像C ++的东西。我意识到这是一个愚蠢的想法,因为这是C ++的重点,但你理解,我很有信心。
答案 0 :(得分:5)
有Better String Library,它是一个纯C库,用于处理“字符串”,试图避免标准C字符串处理的许多问题。
答案 1 :(得分: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.”
答案 2 :(得分:2)
您可以通过阅读SO上的相关问题来开始解决指针/数组/字符串问题。这些问题并不缺乏。
为了编写包含指针/数组/字符串的正确C代码,您必须学习和理解一些重要的事项:
cdecl
,可以快速将abracadabrish声明翻译成普通英语或反过来。void f(int a[])
),请不要相信您的眼睛。它是一个指针,而不是一个数组。在C中,数组永远不会作为函数参数传递。只传递指针。语法具有欺骗性,C的创建者对此类事情感到遗憾,但现在这都是历史。你无法改变它。sizeof
运算符例外。 sizeof(array)
会在chars
中返回真正的数组大小。但是当您执行sizeof(array+0)
时,您已将array
转换为指向array[0]
的指针类型的表达式,在这种情况下sizeof
将返回指针的大小。 =
进行分配。chars
,chars
数组和指向chars
的指针以及指向chars
数组的指针,我们经常将它们全部称为字符串,但它们确实不是'吨。你看到的字符串,例如"I am a string. Or maybe I'm not."
被称为字符串文字,某处有与之关联的chars
数组。我在某处说,因为字符串文字在不同的上下文中表现不同。在所有C表达式中(不要与声明/定义混淆),除了大约一个,字符串文字表现为指向包含文字文本的数组的第一个char
的指针。唯一的例外是sizeof
。它将以chars
之类的内容返回sizeof("ABC")
的基础数组的大小。再次,就像数组一样,在您编写sizeof("ABC"+0)
的那一刻,您已将"ABC"
转换为指向char
的指针,而sizeof
将返回指针的大小。< / LI>
char
数组:"ABC"[0] = 'Z';
是未定义的行为。 char* p = "ABC"; p[0] = 'Z';
或等效的char* p = "ABC"; *p = 'Z';
。chars
的数组或指向chars
的指针(您也可以将字符串文字分配给指针,但不能分配给数组,数组不可分配,如前所述) )。发生什么取决于你正在初始化什么。在char a[] = "Hello";
或char a[] = { "Hello!" };
中,您创建了一个chars
数组,并将其内容设置为字符串文字中的文本。如果需要,您可以在之后修改该数组。在char* p = "World!";
中,您创建一个包含文字字符串文本的char
数组,并创建指向该char
指向该数组的第一个char
的指针。在这种情况下,你不能像我之前指出的那样改变数组。"Hello" " World!"
与"Hello World!"
相同。这是关于它的。主声明,表达式和函数参数中的主数组,观察字符串文字。
答案 3 :(得分:0)
虽然并不总是需要重新发明轮子。我倾向于认为,通过这样做,您可以更好地理解事物的运作方式。虽然,不确定你正在使用什么类型的时间框架。否则,如另一个答案中所提到的,Better String Library是一个非常好的。