J'apprends C et j'ai besoin d'écrire un programme avec une fonction goodString, qui renvoie 0 si un caractère de la chaîne est répété 2 fois ou plus et renvoie 1 sinon, mais j'obtiens toujours l'erreur "en passant l'argument 1 de 'goodString' fait pointeur d'un entier sans cast ". Qu'est-ce que je fais mal? Je suis assez nouveau dans les pointeurs, est-ce que je les utilise mal ou y a-t-il quelque chose que j'ai mal saisi dans le code ou quelque chose? Merci pour votre temps.

Voici mon code:

Fonction goodString:

int goodString(char *genString, int lenghtString) {
    int i, j, condition=1;
    for (i=0; i < lenghtString; ++i) {
        for (j=0; j < i; ++j) {
            if (*(genString+j) == *(genString+i))
                condition=0;
        }
    }
    return condition;
}

Partie de main où goodString est utilisé:

char string[20], *first;
first = &string[0];
do {
    printf("Input a string up to 20 characters");
    gets(string);
    lenght = strlen(string);
} while (goodString (*first, lenght));

Cette partie du programme principal vous oblige à continuer à saisir la chaîne jusqu'à ce qu'il n'y ait plus de répétition de caractères dans la chaîne

2
leon000 29 déc. 2015 à 20:39

2 réponses

Meilleure réponse

goodString attend char * comme premier argument. *first est de type char. Vous devez passer first comme premier argument à la fonction goodString.

3
haccks 29 déc. 2015 à 17:40

Cette ligne déréférence le pointeur (sic) ...

goodString (*first, lenght)

Au lieu de cela, vous voulez (sic) ...

goodString (first, lenght)

Un * dans une déclaration de type (par exemple char *first) est un pointeur vers un type. Avec une variable (par exemple *first, il déréférence ce vers quoi il pointe (par exemple char).

0
Jason 29 déc. 2015 à 18:05