5

我可以在声明后初始化字符串吗?

char *s;
s = "test";

代替

char *s = "test"; 
4

3 回答 3

6

您可以,但请记住,使用该语句,您将存储在s指向其他地方分配的只读字符串的指针中。任何修改它的尝试都会导致未定义的行为(即,在某些编译器上它可能会工作,但通常会崩溃)。这就是为什么你通常使用 aconst char *来做那件事。

于 2012-07-23T14:02:35.973 回答
3

是的你可以。

#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;
}
于 2012-07-23T14:02:51.543 回答
1

对于指针(如上所述)是正确的,因为引号内的字符串是在编译时从编译器分配的,因此您可以指向此内存地址。当您尝试更改其内容或当您有一个固定大小的数组想要指向那里时,就会出现问题

于 2012-07-23T16:56:26.983 回答