Je suis censé créer un programme, ce qui crée un tableau avec l'abréviation d'un tableau de caractères constant. Bien que mon programme ne renvoie aucune erreur, il n'imprime pas non plus de caractères sur mes points de caractères personnels. À cause de cela, je suppose que mon programme ne fonctionne pas correctement et que cela ne remplisse pas mon tableau avec des caractères.
void abbrev(const char s[], char a[], size_t size) {
int i = 0;
while (*s != '\0') {
printf('%c', *s);
if (*s != ' ' && *s - 1 == ' ') {
a[i] = *s;
i++;
printf('%c', a[i]);
}
s++;
}
}
void main() {
char jordan1[60] = " Electronic Frontier Foundation ";
char a[5];
size_t size = 5;
abbrev(jordan1, a, size);
system("PAUSE");
}
3 Réponses :
Ce que vous voulez faire pourrait être simplifié avec un Cependant, je ne pense pas que c'est la meilleure façon de réaliser ce que vous essayez de faire. Premièrement, pour () code> boucle. Char S [0] code> ne peut pas être obtenu en raison de la vérification du caractère précédent. Ce qui m'amène à la deuxième raison: sur le premier index, vous vérifierez s [-1] code> ce qui n'est probablement pas une bonne idée. Si j'étais implémentée cette fonction, je ferais ceci: p>
UB si (S [i]! = '' && S [I - 1] == '' && POS
out[zbPosOut++] = toupper(*p);
void print_without_duplicate_leading_trailing_spaces(const char *str)
{
while(*str == ' ' && *str) str++;
while(*str)
{
if(*str != ' ' || (*str == ' ' && *(str + 1) != ' ' && *str))
{
putchar(*str);
}
str++;
}
}
Exécutez votre débogueur et passez à travers le code pour voir où cela se passe. Examinez le contenu des variables et vous verrez ce qui se passe.
si (* s! = '' && * s - 1 == '') { code> << - ne sera jamais vrai. (Eh bien, pour un! code>)Comme @wildplasser a écrit, la déréférence se produit avant la soustraction. Vous avez besoin de parens.
Ajouter
met (""); code> avant de revenir deabbrev () code> Pour forcer une rinçage du flux de sortie standard (ou le faire explicitement:fflush (stdout) ; code>).@wildplasser merci pour votre réponse a oublié la parens alors que Nicomp a signalé.
L'utilisation d'un indice négatif est dangereuse, au moins. Dans votre cas, vous allez aborder la chaîne ci-dessous B> son premier caractère.
La première erreur est le manque de requis
#include code> directives.Bien que nous puissions parfois écrire
* s code>, ce n'est pas un bon style d'écrire* (S - 1) code> même avec la parenthésisation correcte. Bon style ests [0] code> ets [-1] code>.Notez que
s [-1] code> n'est pas valide sis code> pointe au début d'un tableau.Vous devez également avoir obtenu des diagnostics de compilation de compilation pour
'% c' code> comme argument surprintf code>, et pourvoid principal code>, aucun desquels correct, mais je ne vois aucune mention dans votre question