1

我有一个函数可以传递一个字符数组或一个字符串。我将此数组用于数据数组,因此其中有很多随机字符,包括 NULL 字符。当我试图检索编译器看到的这些数据和 Null 字符并认为字符串结束时,我的问题就出现了。从而有效地丢弃之后的所有数据。有没有一个选项可以让我以某种方式制作一个不以 Null 字符结尾的数组?

4

3 回答 3

7

AC字符串和数组char不是一回事。第一个是通过第二个实现的,附加约定是字符串在数组具有第一个0元素的位置结束。

所以你需要的只是一个unsigned char[something],你必须单独跟踪你想要的长度。那么你也不应该使用strcpy或类似的功能,但是memcpy等等。

于 2013-06-06T19:47:03.057 回答
3

null ( '\0') 终止符在 C 中被视为字符串终止符。因此,您需要准确地告诉编译器要读取多少数据,为什么不维护一个单独的数据大小计数,然后使用使用该数据的函数对数据进行操作的大小?

于 2013-06-06T19:45:13.010 回答
2

首先,C 语言中的字符串不是某种“黑匣子”对象,它可以以某种方式选择忽略或不忽略某些事物。它仅基于原始字符数组,您可以完全不受限制地控制这些字符。这意味着实际上是选择如何处理存储在该字符数组中的数据。不是编译器,不是字符串本身,而是你,只有你。

其次,C语言中的字符串被定义为以零字符结尾的字符序列。这立即意味着,如果您尝试对数组使用特定于字符串的函数,它们将始终停在零处。如果您希望您的数据包含嵌入的零,那么您不应将其称为“字符串”,并且不应使用任何特定于字符串的函数。所以,忘了strcmpstrcpy等等。同样,这是您负责的事情,而不是编译器。

第三,您对此类数据使用的功能通常是memcpy复制、memcmp比较等功能。缺少的任何东西都必须自己实现。由于您的数据中不再有任何终止字符,因此您有责任了解数据的开始位置和结束位置。

于 2013-06-06T20:21:55.827 回答