C 为什么我会得到;分段错误;?
我已经搜索并尝试了许多其他问题的答案,比如我的,但我仍然不明白,我不知道我在这里遗漏了什么。这个程序应该模拟一个拍卖,这是一个较小的“出价”获胜的游戏。我已经想出了这段代码,但是当我使用strcpy和char变量类型时,出现了这个分段错误C 为什么我会得到;分段错误;?,c,C,我已经搜索并尝试了许多其他问题的答案,比如我的,但我仍然不明白,我不知道我在这里遗漏了什么。这个程序应该模拟一个拍卖,这是一个较小的“出价”获胜的游戏。我已经想出了这段代码,但是当我使用strcpy和char变量类型时,出现了这个分段错误 #include <stdio.h> #include <stdlib.h> #include <string.h> int func02(int venc, int nj, int max, int mod, float
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int func02(int venc, int nj, int max, int mod, float med, char *nome);
int lanc;
int main (void)
{
lanc = func02(0, 36, 15, 0, 0, "nome");
printf("%d", lanc);
return EXIT_SUCCESS;
}
int func02(int venc, int nj, int max, int mod, float med, char *nome)
{
int lance;
if (venc == 0) {
strcpy(nome, "ceadf");
lance = 4;
}
else {
if ((med <= mod) && (venc >= mod)) {
lance = mod++;
}
else {
lance = venc++;
}
}
return(lance);
}
#包括
#包括
#包括
int func02(int venc、int nj、int max、int mod、float med、char*nome);
int lanc;
内部主(空)
{
lanc=func02(0,36,15,0,0,“nome”);
printf(“%d”,lanc);
返回退出成功;
}
int func02(int venc、int nj、int max、int mod、float med、char*nome)
{
内喷管;
如果(venc==0){
strcpy(nome,“ceadf”);
兰斯=4;
}
否则{
如果((med=mod)){
lance=mod++;
}
否则{
lance=venc++;
}
}
回程(喷管);
}
您已经将字符串literal的“nome”
传递给了func02()
,您正在编写它
字符串文本是只读的,写入它们将导致未定义的行为,如分段失败您不能使用strcpy函数将字符串复制到字符串文本中
而是动态分配字符串,然后调用strcpy()。好的,首先,当你发布这样的问题时,最好显示代码在哪一行崩溃,最好是回溯。话虽如此,情况如下:
lanc = func02(0, 36, 15, 0, 0, "nome");
这里您将常量字符串“nome”发送到func02
strcpy(nome, "ceadf");
您正在尝试将“ceadf”复制到nome
,但由于两个原因失败:
nome
是一个常量字符串。你不能修改它lanc=func02(0,36,15,0,0,“nome”)代码>然后strcpy(nome,“ceadf”)代码>您不能使用所有警告和调试信息进行编译(gcc-Wall-Wextra-g
with…)。使用调试器gdb
@RohanKumar请不要编辑帖子的样式(比如在自己的行中移动大括号),这没有用。@FedericoklezCulloca:啊,对不起。我会从下次开始记住这一点;)@正如你提到的,我已经编译了BasileStarynkevitch。我没有调试器,因为我正在使用Putty连接到运行Debian的服务器,用于教育目的。我在哪里粘贴来自GCC的警告?