是否可以使用字符串忽略null终止字符

时间:2013-06-06 19:43:28

标签: c string null

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

3 个答案:

答案 0 :(得分:7)

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

所以你需要的只是一个unsigned char[something],你必须分别跟踪你想要的长度。那么你也不应该使用strcpy或类似的函数,而是memcpy等。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

首先,C语言中的字符串不是某种“黑盒子”对象,它可以某种方式选择忽略或不忽略它自己的意志。它基于一个纯粹的字符阵列,你可以完全不受限制地控制。这意味着它真的选择如何处理存储在该字符数组中的数据。不是编译器,不是字符串本身,而是你和你自己。

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

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

相关问题