首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nul终止整型数组

nul终止整型数组
EN

Stack Overflow用户
提问于 2010-06-08 23:52:29
回答 4查看 9.2K关注 0票数 4

gcc 4.4.4 c89

我只是在试验一个整型数组。我突然想到了一些事情。我能不能终止它。例如,我使用0表示nul终止。但是,0很可能是此数组中的有效值。

下面的代码将在5之后终止。即使我的意思是0是一个有效的数字。但是,我可以指定数组的大小。但在这种情况下,我不想这样做,因为我只对这个特定的问题感兴趣。

非常感谢你的建议,

代码语言:javascript
复制
#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++);
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-08 23:53:58

简而言之,不是。从技术上讲,nul字符在字符串中也同样有效,这只是一种约定,我们使用它们来标记字符串的结尾,所有标准库函数都希望如此。有一些以\0\0结尾的“双nul”字符串,用于字符串需要包含\0的情况,但当然也存在无法在字符串中存储\0\0的问题。

如果您不想单独存储数组的大小(或者使用像sizeof这样的技巧),那么您需要想出一个可以以该类型存储的标记,但您知道它不会是数组的一部分;只要您确定arr不会将其作为有效值,就可以使用45,它只需要是唯一的

票数 15
EN

Stack Overflow用户

发布于 2010-06-09 00:05:50

为了使用标记值,显然你必须找到一个不是有效数据的值。这是使用前哨的缺点之一(另一个缺点是需要线性搜索才能找到长度)。像0xFFFF这样的东西是如何为你工作的呢?

如果这是C++,我建议创建一个带有相关长度成员的类(或者更好的方法是,只使用std::vector)。对于C,您可能只需要自己保留单独的长度变量。如果你愿意,你可以把它和数组放在一个结构体中。

票数 3
EN

Stack Overflow用户

发布于 2010-06-09 01:35:38

简单地说,\0与0相同,所以如果你的数组中有一个零,你的代码会把它误认为是数组的结尾:

代码语言:javascript
复制
int arr[] = {30, 450, 14, 5, 0, 10, '\0'};
                             ^ this is the end of the array

编辑:请注意,这里所说的“数组末尾”指的是算法定义的数组的概念性末尾,而不是C编程语言在内存中显示的数据的实际范围。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2998983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档