在C中,我试图以两种不同的方式将变量分配给变量
char question[200];
strcpy( question, "This is the question" );
和
char question[] = "This is the question";
两者都有效...... 但是这两种方法的区别是什么?
答案 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 ++)。