Je suis censé répondre à une question de devoirs pour l'un de mes cours. Plus précisément, je suis censé dire si certains tableaux en C sont considérés comme des chaînes ou non. Sur la base de cet article ( https://www.geeksforgeeks.org/strings-in-c-2/ ), je sais que les chaînes sont un tableau de caractères avec le terminateur nul à la fin.
Mon principal blocage est une partie de la question qui pose un tableau qui ressemble à ceci:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
Il s'agit évidemment d'un tableau de caractères avec un caractère de fin nul à la fin. Cependant, est-elle toujours considérée comme une chaîne car elle a également un caractère de fin nul au milieu? Comment cela affectera-t-il la chaîne?
EDIT: Sur la base des commentaires, j'ai fourni le libellé réel de la question:
"Lequel des tableaux suivants peut être considéré comme des" chaînes "dans le but de les utiliser comme arguments pour strcpy (), strncpy (), strcmp (), strncmp () et des fonctions de chaîne similaires (indiquer toutes les applications)?"
EDIT: J'ai envoyé un courriel à mon professeur à ce sujet car la question semblait libellée de manière ambiguë (comme plusieurs personnes l'ont souligné). Si quelqu'un est curieux, il m'a dit "Oui, c'est une chaîne. La clé est qu'il y a un caractère nul. Mais bien sûr, cela affectera toutes les opérations de chaîne; la chaîne se termine au caractère nul."
strcmp()
. Le fait qu'il puisse être utilisé comme argument pour muter des fonctions de chaîne dépend de facteurs supplémentaires qui ne sont pas fournis.
c1
est modifiable, donc je ne vois pas pourquoi il ne serait pas un argument de destination valide pour strcpy
ou similaire, sauf s'il n'était pas assez grand pour accueillir la chaîne source. Cela ne ferait pas que ce ne soit pas une chaîne, mais pas une chaîne adaptée à un objectif donné.
c1
satisferait les exigences de base pour les arguments de chaîne pour toutes les fonctions de chaîne (étroites) de la bibliothèque standard, y compris toutes celles spécifiquement nommées, mais le comportement pourrait ne pas être ce que l'appelant attend ou veut (même en ignorant les comportements indéfinis qui pourraient être obtenus).
char
. N'importe quel type de caractère fera l'affaire.
"CS"
avec quelques octets de déchets ajoutés (auquel cas le caractère NUL final n'est pas pertinent). Mais ce n'est pas une chaîne "dans son ensemble". - Néanmoins, le nourrir,strcpy
etc. ne fera pas exploser votre PC car ces fonctions ne "verront" que la"CS"
pièce.