分配字符串之间的区别

时间:2014-12-02 06:29:42

标签: c

在C中,我试图以两种不同的方式将变量分配给变量

char question[200];
strcpy( question, "This is the question" );

char question[] = "This is the question";

两者都有效...... 但是这两种方法的区别是什么?

4 个答案:

答案 0 :(得分:3)

差异可能是灵活性。此

strcpy( question, "This is the question" );

您可以在声明变量后随时执行此操作。 鉴于此:

char question[] = "This is the question";

您必须在申报时间内直接使用。

在第二个 例如question的长度固定为长度 用于null终止符的文本+1。你无法改变 稍后此变量的长度,因此您无法指定更大的变量 例如,字符串。

答案 1 :(得分:3)

区别在于第一个例子,你分配了200个" char"在记忆中。在第二个中,你分配了其中的21个。

答案 2 :(得分:3)

char question[200];
strcpy( question, "This is the question" );
len = sizeof(question);

len = 200

但是在

char question[] = "This is the question";
len = sizeof(question);

len = 21

  

这意味着,在第一种情况下,你可以用最多199个字符重写字符串,这在第二种情况下是不可能的。这将导致越界访问错误。

答案 3 :(得分:0)

两者都有效,但也有其他影响。使用固定缓冲区可能很危险,特别是使用strcpy。

如果要将超过200个字节的字符串复制到问题缓冲区中,则会覆盖堆栈中的其他数据,从而导致缓冲区溢出

有时候使用动态分配的字符串可能更好,但是你需要确保不会导致内存泄漏(这就是高级语言在幕后做的事情,比如带有std :: string的c ++)。