0
votes

Utilisation de l'opérateur "- =" avec l'élément de tableau en C

Le code suivant supprime le 7ème caractère et au-delà de la chaîne J'ai compris cela, mais quelqu'un peut-il me clarifier la logique générale d'un tableau et des opérations comme S1 [6] - = S1 [6]; . J'ai cherché l'arithmétique des tableaux, mais cela concerne l'arithmétique des adresses et les pointeurs. Merci pour l'aide.

#include <string.h>

int main()   
{ 
   char S1[]= "Hello World";   
   S1[6] -= S1[6];
   printf("%s",S1);
}


2 commentaires

Il définit simplement ce caractère sur 0 afin que printf arrête d'imprimer à cet endroit. Si vous voulez réellement supprimer, c'est-à-dire supprimer complètement un caractère, vous devez déplacer vers la gauche tous les caractères vers la droite, y compris le terminateur 0 . Le tableau aura cependant toujours la même taille. Si le tableau doit également être redimensionné, alors il doit être alloué dynamiquement et non pas sur la pile comme il l'est maintenant, donc vous pouvez le réallouer à une taille plus petite (avec toutes les vérifications nécessaires ofc). L'opérateur - = soustrait le côté droit de la gauche, puis attribue le résultat vers la gauche. Donc, a - = b; équivaut à a = a - b;


L'opérateur - = n'est pas lié aux tableaux. S1 [6] - = S1 [6] est un code C très pauvre pour S1 [6] = 0 .


3 Réponses :


2
votes

L'instruction

S1[6] = S1[6] - S1[6];

peut être lue comme

 S1[6] -= S1[6];

Donc, fondamentalement, elle soustrait la valeur de l'instance de tableau elle-même, de sorte que faire le 7ème. élément comme 0.

Cependant, cela ne change la valeur d'aucun autre élément du tableau (pas comme ce que vous avez mentionné comme "7ème caractère et au-delà .."), cela rend juste la valeur de 7ème comme 0 , qui est le caractère nul de fin pour une chaîne . Ainsi, après la modification, lorsque vous passez le tableau à une fonction qui attend une chaîne, jusqu'au terminateur nul n'est que visible.


4 commentaires

Donc, cela signifie essentiellement que faire du 7e élément et ainsi de suite zéro?


Non, x = x - x n'est qu'une façon compliquée de dire x = 0 . Je virerais un programmeur qui écrit du code comme celui-ci.


@IDK Non. Comme mentionné, seul le 7ème élément sera 0. Mais un 0 signifie "fin de chaîne", donc les éléments suivants ne sont même pas pris en compte dans le traitement des chaînes.


@IDK Pas ainsi de suite, seulement le 7ème élément.



1
votes
S1[6] = '\0';

3 commentaires

Merci pour le commentaire utile, je ne sais pas pourquoi ils ont écrit le code comme ça au lieu de l'égaler à 0.


Il peut être utilisé comme indicateur de plagiat. Si quelqu'un vole une telle source, elle est facilement identifiable.


@MartinJames :-)



1
votes

Comme cette ligne de code S1 [6] - = S1 [6]; produira zéro donc lorsque vous exécuterez votre code pour imprimer la chaîne de mots bonjour, il imprimera du début jusqu'au terminateur nul afin qu'il n'imprime que les 5 premiers caractères


0 commentaires