Erreur de types en conflit

quand je lance le code suivant, j’obtiens l’erreur

problem1.c:136:6: error: conflicting types for 'strcspn' int strcspn( char * str, char * reject ) 

Je ne sais pas pourquoi je reçois l’erreur des types en conflit. voici le code:

 int strcspn( char * str, char * reject ) { int counter = 0; for (int i = 0; i < strlen(str); i ++) { for (int j = 0; j < strlen(reject); j++) if ( *(str + i) == *(reject + j) ) return counter; counter++; } return counter; } void main () { char * str1 = (char *)malloc(sizeof(char)*100); char * str2 = (char *)malloc(sizeof(char)*100); sprintf(str1, "abc123"); sprintf(str2, "d2"); printf("%d\n", strcspn(str1, str2)); } 

Comme lowtech l’a déjà dit dans sa réponse, vous devriez éviter de redéfinir les noms des fonctions déjà sockets dans vos programmes C.

De toute façon, il y a un problème avec votre programme que vous devriez savoir.

1) Le type de retour de strlen est size_t et non int.
2) main doit être au moins int main (void) {}
3) il n’est pas nécessaire de lancer malloc, son type de retour est vide *
4) et le plus important, vous devriez toujours libérer ce que vous malloc.

Jetez un coup d’oeil ici:

 #include #include #include int strcspn_ss( char * str, char * reject ){ int counter = 0; size_t i,j; for (i = 0; i < strlen(str); i ++){ for (j = 0; j < strlen(reject); j++) if ( *(str + i) == *(reject + j) ) return counter; counter++; } return counter; } int main (void){ char * str1 = malloc(sizeof(char)*100); char * str2 = malloc(sizeof(char)*100); sprintf(str1, "abc123"); sprintf(str2, "d2"); printf("%d\n", strcspn_ss(str1, str2)); free(str1); free(str2); return 0; } 

EDIT: comme l'a dit cad dans son commentaire, il est important de savoir que si vous déclarez une variable à l'intérieur d'une fonction ou utilisée en tant que paramètre n'affecte pas la fonction strcspn, veuillez consulter les éléments suivants:

 #include void foo(int strcspn){ printf("strcspn = %d\n",strcspn); } int main (void){ int strcspn = 10; foo(strcspn); return 0; } 

Ce qui est légal.

strcspn est déclaré dans . On dirait que vous avez en quelque sorte inclus cet en-tête et ensuite essayé de redéfinir strcspn différemment de la définition du fichier d’en-tête. Dans mon il est défini comme

  size_t strcspn (const char * s, const char * rejette);