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); }
3 Réponses :
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.
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.
S1[6] = '\0';
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 :-)
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
Il définit simplement ce caractère sur
0
afin queprintf
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 terminateur0
. 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 leré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 pourS1 [6] = 0
.