我已经搜索并尝试了许多其他问题的答案,比如我的问题,但我仍然没有得到它,我不知道我在这里缺少什么。这个程序应该模拟拍卖,这是一个较小的“出价”获胜的游戏。我已经提出了这个代码,但是当我使用strcpy和char变量类型时,会出现这个分段错误。
#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);
}
答案 0 :(得分:3)
您已将字符串文字"nome"
传递给func02()
,而您正在编写它。
字符串文字是只读的,写入它们会导致未定义的行为,如分段失败
答案 1 :(得分:1)
您无法使用strcpy函数将字符串复制到字符串文字中。
而是动态分配你的字符串,然后调用strcpy()。
答案 2 :(得分:1)
好的,首先,当您发布这样的问题时,最好显示代码崩溃的行,最好是回溯。话虽如此,这是正在发生的事情:
lanc = func02(0, 36, 15, 0, 0, "nome");
这里您将常量字符串“nome”发送到func02
。
strcpy(nome, "ceadf");
在这里,您尝试将“ceadf”复制到nome
,但由于两个原因而失败:
nome
是一个常量字符串。你不能修改它。
即使您可以修改它,它只有五个字符长(“nome”中的每个字母加上空字节),并且您尝试将六个字节复制到其中(每个字母“ceadf”加上一个空字节)。即使您使用可写字符串,这也是一个内存问题。一般来说,我会避免使用strcpy
,因为它很容易犯这样的错误。