En C, un pointeur vers char
n'est pas nécessairement une chaîne. En d'autres termes, juste parce que vous avez char *x;
, cela ne signifie pas que x
est une chaîne.
Pour être une chaîne, x
doit pointer vers une région convenablement affectée qui a un 0
dans quelque part. Les données du premier caractère x
pointent vers et jusqu'à 0
est une chaîne. Voici quelques exemples de chaînes en C:
char x[5] = {0}; /* string of length 0 */
char x[] = "hello"; /* string of length 5, the array length being 6 */
char *x = "hello"; /* string of length 5. x is a pointer to a read-only buffer of 6 chars */
char *x = malloc(10);
if (x != NULL) {
strcpy(x, "hello"); /* x is now a string of length 5. x points
to 10 chars of useful memory */
}
Ne sont pas des chaînes:
char x[5] = "hello"; /* no terminating 0 */
char y = 1;
char *x = &y; /* no terminating 0 */
Alors maintenant dans votre code, premier paramètre de AFunc
, même si est un char *
est pas nécessairement un string. En fait, dans votre exemple, ce n'est pas le cas, car il pointe uniquement vers une mémoire qui a un élément utile, et ce n'est pas zéro.
Selon la manière dont vous souhaitez modifier la chaîne et la manière dont la chaîne a été créée, plusieurs options sont disponibles.
Par exemple, si les myStr
pointe vers une mémoire inscriptible, vous pourriez faire quelque chose comme ceci:
/* modify the data pointed to by 'data' of length 'len' */
void modify_in_place(char *data, size_t len)
{
size_t i;
for (i=0; i < len; ++i)
data[i] = 42 + i;
}
Une autre façon légèrement différente serait pour la fonction de modifier data
jusqu'à ce qu'il voit le terminer 0
:
void modify_in_place2(char *data)
{
size_t i;
for (i=0; data[i]; ++i)
data[i] = 42 + i;
}
Quel est votre but de le faire? – tristan
Demandez-vous comment déclarer une chaîne de plus d'un caractère ou comment l'exploiter? Et dans les deux cas, soyez précis. – Potatoswatter
To Potatoswatter: J'aimerais connaître les deux choses. – user225626