分配字符串之间的区别
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 ++)。