-1
我一直在开发一个程序来读取文件中的数据,然后当我尝试创建一个恒定大小的字符串时,我收到了Seg Fault。字符串创建时的分段错误
FILE *in = fopen("entrada.txt", "r");
t_mapa *mapa;
t_jogador *jogadores;
jogadores = NULL;
int i, num_jogadores, tamanho_mapa;
char *token1, *token2;
char str1[4], str2[4]; //RIGHT HERE WHEN I CREATE THE STRING, I RECEIVE A SEG FAULT
if(in == NULL){
printf("Arquivo Não pode ser aberto");
}
fscanf(in, "%d", &tamanho_mapa);
printf("%d\n", tamanho_mapa); //Debugger
mapa->mapa = cria_mapa(tamanho_mapa);
preenche_mapa(mapa, in, tamanho_mapa);
fscanf(in, "%d", &num_jogadores);
printf("%d %p\n", num_jogadores, jogadores); //Debugger
jogadores = cria_jogadores(num_jogadores);
for(i=0; i<num_jogadores; i++){
fscanf(in, "%s %s", str1, str2);
token1 = strtok(str2, ",");
token2 = strtok(NULL, ",");
jogadores[i].linha = atoi(token1);
jogadores[i].coluna = atoi(token2);
}
你怎么知道这是崩溃的地方?因为这是不会导致崩溃的代码,除非您有堆栈溢出(并且不会显示为分段错误)。请使用调试器来捕捉实际崩溃,并找出代码中真正发生的位置。 –
我有两个关于错误的猜测,但是:任何一个'strtok'调用都会返回一个'NULL'指针(你不检查)。或者你忘记了C中的字符串需要一个额外的字符来终止''\ 0',并且你写出了数组的边界。第三个原因可能是'cria_jogadores'未能分配内存,或者返回一个指向本地数组的指针。 –
'char str1 [4],str2 [4];'从包含两个令牌的文件字符串中读取时看起来很小。这意味着输入为3字符串,如“a,b” –