分配字符串之间的区别

CI试图以两种不同的方式将变量分配给变量

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

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

两者都有效……但这两种方法有什么区别?

差异可能是灵活性。 这个

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

在声明变量后,您可以随时进行。 鉴于此:

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

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

在第二个示例中, question的长度固定为null终止符的文本长度+1。 您以后无法更改此变量的长度,因此您无法为其分配更大的字符串。

区别在于第一个示例,您在内存中分配了200个大小的“char”。 在第二个中,您分配了其中的21个。

 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个字符重写字符串,这在第二种情况下是不可能的。 这将导致越界访问错误。

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

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

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