我可以在声明后初始化字符串吗?
char *s;
s = "test";
代替
char *s = "test";
您可以,但请记住,使用该语句,您将存储在s
指向其他地方分配的只读字符串的指针中。任何修改它的尝试都会导致未定义的行为(即,在某些编译器上它可能会工作,但通常会崩溃)。这就是为什么你通常使用 aconst char *
来做那件事。
是的你可以。
#include <stdio.h>
int
main(void)
{
// `s' is a pointer to `const char' because `s' may point to a string which
// is in read-only memory.
char const *s;
s = "hello";
puts(s);
return 0;
}
注意:它不适用于数组。
#include <stdio.h>
int
main(void)
{
char s[32];
s = "hello"; // Syntax error.
puts(s);
return 0;
}
对于指针(如上所述)是正确的,因为引号内的字符串是在编译时从编译器分配的,因此您可以指向此内存地址。当您尝试更改其内容或当您有一个固定大小的数组想要指向那里时,就会出现问题