La correzione del problema è qusta:
// esercizio minuti lavorati (9.1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void apri(char *str,FILE **fd);
void cercaPrimo(FILE **fd,char *primo,char *code);
void cercaUltimo(FILE **fd,char *ultimo,char *code);
int strContain(char *primo,char *code);
int minuti(char *primo);
int main(int argc,char *argv[]){
if (argc==3){
FILE **fd;
fd=malloc(sizeof(FILE));
apri(argv[1],fd);
char *primo;
char *code;
code=argv[2];
primo=malloc(sizeof(char));
cercaPrimo(fd,primo,code);
printf("primo: %s\n",primo);
char *ultimo;
ultimo=malloc(sizeof(char));
cercaUltimo(fd,ultimo,code);
printf("ultimo: %s\n",ultimo);
int min1,min2;
min1=minuti(primo);
printf("%d\n",min1);
min2=minuti(ultimo);
printf("%d\n",min2);
int risultato;
risultato=min2-min1;
printf("risultato è: %d \n",risultato);
}
return 0;
}
void apri(char *str,FILE **fd){
*fd= fopen(str, "r");
if (fd==NULL){
printf("errore...");
exit(EXIT_FAILURE);
}
}
void cercaPrimo(FILE **fd,char *primo,char *code){
int ris;
while (!(feof(*fd))){
primo=fgets(primo,25,*fd);
ris=strContain(primo,code);;
if (ris==1){
break;
}
}
}
void cercaUltimo(FILE **fd,char *ultimo,char *code){
int ris;
char *p;
p=malloc(sizeof(char));
while (!(feof(*fd))){
p=fgets(p,25,*fd);
if (p==NULL){
break;
}
ris=strContain(p,code);
if (ris==1){
strcpy(ultimo,p);
}
}
}
int strContain(char *primo,char *code){
int len1=strlen(primo);
int len2=strlen(code);
int i,count;
count=0;
for (i=0;i<len1;i++){
if (primo[i]==code[count]){
count++;
}else{
count=0;
}
if (count==(len2)){;
return 1;
}
}
return 0;
}
int minuti(char *primo){
int ore,minuti;
char *p;
ore=strtol(primo,&p,0);
minuti=strtol(p,&p,0);
printf("%d\n",ore);
printf("%d\n",minuti);
return (ore*60+minuti);
}
questa è la funzione completa in quanto quella postato all'inizio era solo la parte iniziale di un problema più generale.
La correzione è stata (come detto da oregon) passare alla funzione apri un doppio puntatore a fd.