循环遍历字符串 - 在null上退出而不是零

时间:2013-05-10 08:24:22

标签: c

我写了一个小程序来突出我在C中遇到的问题。我希望在下面的代码中,循环显示将打印0,但是退出null;然而,循环退出0.我到底想知道什么/我不理解?非常感谢您的帮助。

#include <stdio.h>

int main (void)
{
    int i = 0;
    int iArray[] = {1, 2, 0, 4, 5, '\0'};
    int cArray[] = {1, 2, 0, 4, 5, '\0'};

    for(i=0; iArray[i] != '\0'; i++)
    {
        printf("\nElement: %d", iArray[i]);
    }

    for(i=0; cArray[i] != '\0'; i++)
    {
        printf("\nElement: %d", iArray[i]);
    }
    return 0;
}

谢谢, 丹

4 个答案:

答案 0 :(得分:2)

字符文字'\0'实际上与整数文字0相同。所以它在数组中达到零时停止。

更准确地说,'\0'是八进制值为零。具有前导零的所有字符(当然还有字符串)转义序列都是八进制值,并且将由编译器“按原样”插入。


对于数组,还有另一种查找结束的方法,即获取数组中的项数,如

for(i=0; i < sizeof(iArray) / sizeof(iArray[0]); i++)

然而,使用例如获取数组中项目数的sizeof(iArray) / sizeof(iArray[0])仅适用于实数组。只要你传递一个数组(例如作为一个函数的参数),它就会衰减到一个指针并且不再能使用“技巧”。

答案 1 :(得分:2)

0 == '\0'

因此iArray[i] != '\0'iArray[i] != 0

相同

并且您的数组在第三个元素中包含0,因此for循环将仅打印每个数组的2个第一个元素。

答案 2 :(得分:1)

你缺少引号,你似乎想要创建一串数字。数字'1'与值1的字符不同。

此外,您的数组是int,当时它们应该是char

尝试:

const char iArray[] = { '1', '2', '0', '4', '5', '\0'};

当然可以更简单地写为:

const char iArray[] = "12045";

答案 3 :(得分:1)

因为0'\0是等效的。实际上第一个是数字,第二个是char,当插入数组时,它被转换(转换)为int。可能你想创建一个字符串,所以创建一个char类型的数组,用'0'引号括起每个数字,并用%d替换%c

注意:'0'代表字符零,与文字0和等效'\0'不同,正如您在the ASCII table上看到的那样。 1'1'

相同

如果你想要一个整数数组,那么你不能使用'\0'作为终结符,因为第一句中所述的原因(除非你确定0不会出现在数组中),保持长度为在某处使用数组并将其用于迭代。