尝试修改字符串常量会导致未定义的行为:
char * p = "wikipedia";
p[0] = 'W'; // undefined behaviour
防止这种情况的一种方法是将其定义为一个数组而不是一个指针:
char p[] = "wikipedia";
p[0] = 'W'; // ok
为什么使用char*
会导致未定义行为,而使用char[]
则不会呢?
尝试修改字符串常量会导致未定义的行为:
char * p = "wikipedia";
p[0] = 'W'; // undefined behaviour
防止这种情况的一种方法是将其定义为一个数组而不是一个指针:
char p[] = "wikipedia";
p[0] = 'W'; // ok
为什么使用char*
会导致未定义行为,而使用char[]
则不会呢?
const char * p = "wikimedia";
const
的声明是合法的(为了不破坏旧代码)。但无论是否有编译器警告,使用const
都是一个非常好的主意。const
。)char s[] = "wikimedia"; /* initializes the array with the bytes from the string */
char t[] = { 'w', 'i', ... 'a', 0 }; /* same thing */
char u[] = *p
char *
变量。任何警告都是不受欢迎的。 - Pascal Cuoqif (n = 0)
。 - Kerrek SB