gpt4 book ai didi

c - 总线: error 10 in C是什么意思

转载 作者:太空狗 更新时间:2023-10-29 16:20:03 31 4
gpt4 key购买 nike

下面是我的代码

#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 中)和堆栈分配,但我不会讨论这些,因为它们的使用有些问题。


正如@SangeethSaravanaraj 在评论中指出的那样,每个人都错过了#import。它应该是#include:

#include <stdio.h>
#include <string.h>

关于c - 总线: error 10 in C是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716714/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com