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