Rédaction cette méthode avec les critères suivants ..Obtention d'une sortie inattendue avec l'erreur
ENTRÉE: aabbb SORTIE: a2b3
INPUT: ab SORTIE: ab (parce que sa plus courte que A1B1)
INPUT: a23 SORTIE: erreur (ne pas lire les chiffres)
Voici la méthode actuelle que j'ai pour cela.
void encrypt(char* crypt, const char* source) {
while (1) {
char tmp = *source;
if (!tmp) {
*crypt = 0;
printf("error\n");
return;
}
size_t count = 1;
while (*(++source) == tmp){
if(isdigit(tmp)){
printf("error\n");
return;
}
++count;
}
*(crypt++) = tmp;
crypt += sprintf(crypt, "%zu", count);
}
}
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "error\n");
return 1;
}
const char* source = argv[1];
char* crypt = malloc(strlen(source)*2+1);
encrypt(crypt, source);
printf("%s\n", crypt);
// free(crypt);
return 0;
}
Très curieusement, chaque fois que je cours, j'obtenir la sortie:
./prog abbbb
error
a1b4
./prog a23r
error
a1
Pourquoi est-ce erreur survenant? Comment puis-je faire en sorte que le premier message d'erreur s'arrête et pourquoi le programme ne se casse pas lorsqu'il y a des nombres au milieu de la chaîne entrée?
Ce programme est parfaitement adapté à un débogueur. –
Honnêtement, et très embarrassant ne sais pas comment utiliser un débogueur correctement et j'utilise une machine distante à travers ssh et vim – sgerbhctim
Vous avez besoin d'un chemin qui se termine normalement lorsque la chaîne se termine. – BLUEPIXY