Declaring and modifying strings in C

前端 未结 1 607
时光取名叫无心
时光取名叫无心 2021-01-22 05:51

I\'ve recently started to try learn the C programming language. In my first program (simple hello world thing) I came across the different ways to declare a string after I reali

1条回答
  •  情歌与酒
    2021-01-22 06:00

    In this declaration

    char *variable_name = "data";
    

    there is declared a pointer. This pointer points to the first character of the string literal "data". The compiler places the string literal in some region of memory and assigns the pointer by the address of the first character of the literal.

    You may reassign the pointer. For example

    char *variable_name = "data";
    char c = 'A';
    
    variable_name = &c;
    

    However you may not change the string literal itself. An attempt to change a string literal results in undefined behaviour of the program.

    In these declarations

    char variable_name[] = "data";
    char variable_name[5] = "data";
    

    there are declared two arrays elements of which are initialized by characters of used for the initialization string literals. For example this declaration

    char variable_name[] = "data";
    

    is equivalent to the following

    char variable_name[] = { 'd', 'a', 't', 'a', '\0' };
    

    The array will have 5 elements. So this declaration is fully euivalent to the declaration

    char variable_name[5] = "data";
    

    There is a difference if you would specify some other size of the array. For example

    char variable_name[7] = "data";
    

    In this case the array would be initialized the following way

    char variable_name[7] = { 'd', 'a', 't', 'a', '\0', '\0', '\0' };
    

    That is all elements of the array that do not have explicit initializers are zero-initialized.

    Pay attention to that in C you may declare a character array using a string literal the following way

    char variable_name[4] = "data";
    

    that is the terminating zero of the string literal is not placed in the array. In C++ such a declaration is invalid.

    Of course you may change elements of the array (if it is not defined as a constant array) if you want.

    Take into account that you may enclose a string literal used as an initializer in braces. For example

    char variable_name[5] = { "data" };
    

    In C99 you may also use so-called destination initializers. For example

    char variable_name[] = { [4] = 'A', [5] = '\0' };
    

    Here is a demonstrative program

    #include 
    #include 
    
    int main(void) 
    {
        char variable_name[] = { [4] = 'A', [5] = '\0' };
    
        printf( "%zu\n", sizeof( variable_name ) );
        printf( "%zu\n", strlen( variable_name ) );
    
        return 0;
    }
    

    The program output is

    6
    0
    

    When ypu apply standard C function strlen declared in header you get that it returns 0 because the first elements of the array that precede the element with index 4 are zero initialized.

    0 讨论(0)
提交回复
热议问题