C:string-literal - 问题

sid*_*com 0 c string-literals

只是在char *ptr = "Hello World"字符串文字或两个"Hello World"字符串文字?

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    char array[] = { "Hello World" };
    char *ptr = "Hello World";

    printf( "%s\n", array );
    printf( "%s\n", ptr );

    printf( "%c\n", *array );
    printf( "%c\n", *ptr );

    printf( "%c\n", array[1] );
    printf( "%c\n", ptr[1] );

    return EXIT_SUCCESS;
}

# Hello World
# Hello World
# H
# H
# e
# e
Run Code Online (Sandbox Code Playgroud)

Eri*_*rik 5

"Hello World"是一个字符串文字 - 无论您是将其分配给char *或将其复制到char []

char * ptr = "Hello World";应该是const char * ptr = "Hello World";- 字符串文字可能是不可修改的(在只读内存中),并且使用a const char *是一个额外的防止修改的保护措施.

char array[] = { "Hello World" }; 是安全的 - 这将字符串文字从潜在的只读内存复制到局部变量中.