Null作为C / C ++中的数组元素

时间:2013-12-05 16:54:17

标签: c arrays

我想将\0作为我的C / C ++代码中的数组(char类型)元素之一,但不是最后一个。 我这样做。

char arr[10]  ; //array declaration
//initializing the array
arr[0] = 'a'  ;
arr[1] = '\0' ;
arr[2] = 's'  ;

当我尝试打印这些数组元素时,我得到一些符号内容作为a[1]的输出。 我猜0被转换为char。是这样吗 ? 如果是的话,在终止之前,我的阵列中是否还有\0

4 个答案:

答案 0 :(得分:3)

'/0'不是空字符。转义使用反斜杠:'\0'

答案 1 :(得分:3)

您可以在数组中将\0与其他值相同,并且没关系。

问题是由于两个原因你无法打印它:

  1. 它终止了coutprintf中的打印,因为他们认为\0表示字符串的结尾。

  2. \0不是可打印字符。

  3. 因此,您应该编写自己的函数来打印打印出\0内容的数组,并且在到达时不会终止字符串。 (所以,你应该用别的东西来表示字符串的结尾)

    例如:

    void print(const std::string &s)
    {
        for (auto x : s)
            std::cout << ((x == '\0')? '.' : x);
    }
    
    int main( )
    {
        std::string s {'a','\0','s'};
        print(s);
    }
    

    输出:

      

    A.S

    它打印一个点而不是那个不可打印的值。

    注意:OP也被标记为

答案 2 :(得分:2)

你可以写一个这样的函数:

void print(char *arr, int length){
    for(int i = 0; i < length; i++){
        if(arr[i] != '\0')
           printf("%c",arr[i]);
        else
           printf("\\0");
    }
}

答案 3 :(得分:1)

在('\0')数组中有一个char是完全有效的,但所有标准函数都假定它表示数组的结尾。因此,要打印这样的(非c-)字符串,您需要自己的功能。例如:

void myPuts(size_t length, char * str){
    size_t i;
    for(i = 0; i < length; i++){
        putchar(str[i]);
    }
}

并将其称为:

myPuts(10, arr);