gcc 4.4.4 c89
我只是在试验一个整型数组。我突然想到了一些事情。我能不能终止它。例如,我使用0表示nul终止。但是,0很可能是此数组中的有效值。
下面的代码将在5之后终止。即使我的意思是0是一个有效的数字。但是,我可以指定数组的大小。但在这种情况下,我不想这样做,因为我只对这个特定的问题感兴趣。
非常感谢你的建议,
#include <stdio.h>
static void test(int *p);
int main(void)
{
int arr[] = {30, 450, 14, 5, 0, 10, '\0'};
test(arr);
return 0;
}
static void test(int *p)
{
while(*p) {
printf("Array values [ %d ]\n", *p++);
}
}发布于 2010-06-08 23:53:58
简而言之,不是。从技术上讲,nul字符在字符串中也同样有效,这只是一种约定,我们使用它们来标记字符串的结尾,所有标准库函数都希望如此。有一些以\0\0结尾的“双nul”字符串,用于字符串需要包含\0的情况,但当然也存在无法在字符串中存储\0\0的问题。
如果您不想单独存储数组的大小(或者使用像sizeof这样的技巧),那么您需要想出一个可以以该类型存储的标记,但您知道它不会是数组的一部分;只要您确定arr不会将其作为有效值,就可以使用45,它只需要是唯一的
发布于 2010-06-09 00:05:50
为了使用标记值,显然你必须找到一个不是有效数据的值。这是使用前哨的缺点之一(另一个缺点是需要线性搜索才能找到长度)。像0xFFFF这样的东西是如何为你工作的呢?
如果这是C++,我建议创建一个带有相关长度成员的类(或者更好的方法是,只使用std::vector)。对于C,您可能只需要自己保留单独的长度变量。如果你愿意,你可以把它和数组放在一个结构体中。
发布于 2010-06-09 01:35:38
简单地说,\0与0相同,所以如果你的数组中有一个零,你的代码会把它误认为是数组的结尾:
int arr[] = {30, 450, 14, 5, 0, 10, '\0'};
^ this is the end of the array编辑:请注意,这里所说的“数组末尾”指的是算法定义的数组的概念性末尾,而不是C编程语言在内存中显示的数据的实际范围。
https://stackoverflow.com/questions/2998983
复制相似问题