下面是我的代码
#import <stdio.h>
#import <string.h>
int main(int argc, const char *argv[])
{
char *str = "First string";
char *str2 = "Second string";
strcpy(str, str2);
return 0;
}
它编译得很好,没有任何警告或错误,但是当我运行代码时,出现以下错误
Bus error: 10
我错过了什么 ?
其一,您无法修改字符串文字。这是未定义的行为。
要解决这个问题,你可以做str
本地数组:
char str[] = "First string";
现在,你会遇到第二个问题,那就是str
不够大,无法容纳str2
。所以你需要增加它的长度。否则你会超支str
- 这也是未定义的行为。
为了解决第二个问题,你要么需要str
至少只要str2
。或者动态分配:
char *str2 = "Second string";
char *str = malloc(strlen(str2) + 1); // Allocate memory
// Maybe check for NULL.
strcpy(str, str2);
// Always remember to free it.
free(str);
还有其他更优雅的方法可以做到这一点,涉及 VLA(在 C99 中)和堆栈分配,但我不会讨论这些,因为它们的使用有些问题。
正如@SangeethSaravanaj 在评论中指出的那样,每个人都错过了#import
。它应该是#include
:
#include <stdio.h>
#include <string.h>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)