我可以在声明后初始化字符串吗?
char *s;
s = "test";
而不是
char *s = "test";
答案 0 :(得分:4)
您可以,但请记住,使用该语句,您在s
中存储指向其他位置分配的只读字符串的指针。任何修改它的尝试都会导致未定义的行为(即,在某些编译器上它可能会起作用,但通常会崩溃)。这就是为什么通常你会使用const char *
。
答案 1 :(得分:1)
是的,你可以。
#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;
}
答案 2 :(得分:1)
对于指针(如上所述)是正确的,因为引号内的字符串是在编译时从编译器分配的,因此您可以指向此内存地址。当您尝试更改其内容或当您有一个固定大小的数组想要指向那里时会出现问题