我有一个函数可以传递一个字符数组或一个字符串。我将此数组用于数据数组,因此其中有很多随机字符,包括 NULL 字符。当我试图检索编译器看到的这些数据和 Null 字符并认为字符串结束时,我的问题就出现了。从而有效地丢弃之后的所有数据。有没有一个选项可以让我以某种方式制作一个不以 Null 字符结尾的数组?
3 回答
AC字符串和数组char
不是一回事。第一个是通过第二个实现的,附加约定是字符串在数组具有第一个0
元素的位置结束。
所以你需要的只是一个unsigned char[something]
,你必须单独跟踪你想要的长度。那么你也不应该使用strcpy
或类似的功能,但是memcpy
等等。
null ( '\0'
) 终止符在 C 中被视为字符串终止符。因此,您需要准确地告诉编译器要读取多少数据,为什么不维护一个单独的数据大小计数,然后使用使用该数据的函数对数据进行操作的大小?
首先,C 语言中的字符串不是某种“黑匣子”对象,它可以以某种方式选择忽略或不忽略某些事物。它仅基于原始字符数组,您可以完全不受限制地控制这些字符。这意味着实际上是您选择如何处理存储在该字符数组中的数据。不是编译器,不是字符串本身,而是你,只有你。
其次,C语言中的字符串被定义为以零字符结尾的字符序列。这立即意味着,如果您尝试对数组使用特定于字符串的函数,它们将始终停在零处。如果您希望您的数据包含嵌入的零,那么您不应将其称为“字符串”,并且不应使用任何特定于字符串的函数。所以,忘了strcmp
,strcpy
等等。同样,这是您负责的事情,而不是编译器。
第三,您对此类数据使用的功能通常是memcpy
复制、memcmp
比较等功能。缺少的任何东西都必须自己实现。由于您的数据中不再有任何终止字符,因此您有责任了解数据的开始位置和结束位置。