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)
正如您所说,操纵此字符串会导致未定义的行为:
char *something;
something = "zzzzzzzzzzzzzzzzzz";
Run Code Online (Sandbox Code Playgroud)
如果您对原因感到好奇,请参阅"C字符串文字:它们去哪里了?" .
如果你计划完全操纵你的字符串(即如果你想让它变成可变的话)你应该使用这个:
char something[] = "skjdghskfjhgfsj";
Run Code Online (Sandbox Code Playgroud)
否则,只需声明您的char *
a const char *
表示它指向常量.
在第二个示例中,编译器将足够智能地将其声明为堆栈上的数组,该数组具有保存字符串的确切大小.因此,它的大小受到堆栈的限制.
当然,您可能还是想要指定大小,因为知道何时操作字符串通常很有用.
归档时间: |
|
查看次数: |
496 次 |
最近记录: |