C中的初始化字符串

mjs*_*jsr 1 c arrays initialization char

我有一个问题是关于如何操作c字符串初始化的正确方法例如下一个代码,并不总是正确的.

char *something;
something = "zzzzzzzzzzzzzzzzzz";
Run Code Online (Sandbox Code Playgroud)

我测试了一点点增加了zetas的数量,并且有效地使程序崩溃了两行,那么这个char数组的实际大小限制是多少?我怎么能确定它不会崩溃,这个限制实现是否依赖?以下代码是否始终必须使用正确的方法?

char something[FIXEDSIZE];
strcpy(something, "zzzzzzzzzzzzzzzzzzz");
Run Code Online (Sandbox Code Playgroud)

Chr*_*per 8

正如您所说,操纵此字符串会导致未定义的行为:

char *something;
something = "zzzzzzzzzzzzzzzzzz";
Run Code Online (Sandbox Code Playgroud)

如果您对原因感到好奇,请参阅"C字符串文字:它们去哪里了?" .

如果你计划完全操纵你的字符串(即如果你想让它变成可变的话)你应该使用这个:

char something[] = "skjdghskfjhgfsj";
Run Code Online (Sandbox Code Playgroud)

否则,只需声明您的char *a const char *表示它指向常量.

在第二个示例中,编译器将足够智能地将其声明为堆栈上的数组,该数组具有保存字符串的确切大小.因此,它的大小受到堆栈的限制.

当然,您可能还是想要指定大小,因为知道何时操作字符串通常很有用.