【发布时间】:2012-08-23 00:26:36
【问题描述】:
有什么区别:
char fast_car[15]="Bugatti";
和
char fast_car[15];
fast_car="Bugatti";
因为第二个导致编译错误:
错误:从类型分配给类型“char[15]”时类型不兼容 ‘字符*’
虽然第一个工作正常。将字符串放入数组中与数组初始化不同的位置会很有帮助。
【问题讨论】:
-
您可以使用
snprintf或strncpy之类的字符串函数来用新值填充数组 -
不要使用
strncpy,除非你真的很确定那是你想要的。确保缓冲区足够大,并改用strcpy。 -
@hardpenguin,它会默默地截断字符串。这很少是你想要的。此外,截断时它不会终止字符串。参见例如here。
-
@harald:
strncpy绝对不会比strcpy更安全。当然,您必须确定在这两种情况下您会做什么。 -
@harald:在许多情况下,截断字符串比缓冲区溢出更好(前提是您正确设置了终止空字节)。您知道有多少安全关键错误是由截断字符串导致的?当然,完全不引入错误会更好,但我们都知道这不会发生。真正的解决方案是使用比 C 标准库更好的字符串库。
标签: c arrays string char variable-assignment