C - 区分整数数组中的 0 和\0

标签 c arrays printing zero

<分区>

Possible Duplicate:
nul terminating a int array

我正在尝试打印出数组中的所有元素:

int numbers[100] = {10, 9, 0, 3, 4};
printArray(numbers); 

使用这个函数:

void printArray(int array[]) {
    int i=0;
    while(array[i]!='\0') {
        printf("%d ", array[i]);
        i++;
    }
    printf("\n");
}

问题是,当然 C 不会区分数组中的另一个零元素和数组的末尾,之后它都是 0(也记为\0)。

我知道 0 和\0 在语法上没有区别,所以我正在寻找一种方法或 hack 来实现这一点:

10 9 0 3 4

而不是这个

10 9

数组也可以是这样的:{0, 0, 0, 0} 所以当然输出仍然需要是 0 0 0 0。

有什么想法吗?

最佳答案

不要使用也可能在数组中的值来终止数组。

您需要找到一个UNIQUE终止符。

由于您没有在数组中指示任何负数,我建议以 -1 结束:

int numbers[100] = {10, 9, 0, 3, 4, -1};

如果这不起作用,请考虑:INT_MAXINT_MIN

作为最后的手段,编写一个保证不在数组中的序列值,例如:-1, -2, -3 这表明终止。

0\0 结束并没有什么“特别”之处。以适合您的情况的任何方式终止。


如果您的数组确实可以按任意顺序保存所有值,则终止符是不可能的,您将必须跟踪数组的长度。

根据您的示例,这看起来像:

int numbers[100] = {10, 9, 0, 3, 4};
int Count = 5;
int i;

for(i=0; i<Count; ++i)
{
    // do something with numbers[i]
}

关于C - 区分整数数组中的 0 和\0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318988/

相关文章:

java - 如何打印带或不带标题栏的JFrame?

c - 如何将邻接表添加到 C 中已定义类型的节点?

c - 我在 C 中用于两个集合的 UNION 的代码不起作用

python - 基于其他数组的掩码数组?

c - 结构内部计算的极值和

c - 查找字符数组的长度

c - 静态链接函数在同一台机器上运行时是否具有相同的指针值?

c++ - DuplicateHandle() 是否进行任何进程间通信 (IPC),如果不进行,为什么要使用目标参数?

Java打印条码标签

python - Django 打印声明安全性