En C, une chaîne est un tableau d'octets. Vous ne pouvez pas affecter un "octet vide", mais vous devez déplacer le reste des octets vers l'avant.
est ici une façon de comment faire:
char *write = str, *read = str;
do {
// Skip space and tab
if (*read != ' ' && *read != '\t')
*(write++) = *read;
} while (*(read++));
Rappelez-vous que des chaînes dans C sont généralement en mémoire protégée en écriture, de sorte que vous devez copier sur le tas avant de pouvoir les changer. Par exemple, cette segfaults habituellement:
char *str = "hello world!"; // Literal string
str[0] = 'H'; // Segfault
Vous pouvez copier une chaîne dans le tas avec strdup
(entre autres):
char *str = strdup("hello world!"); // Copy string to heap
str[0] = 'H'; // Works
EDIT: Par votre commentaire, vous pouvez sauter seulement initiale des espaces en se souvenant le fait que vous avez vu un personnage non-espace. Par exemple:
char *write = str, *read = str;
do {
// Skip space and tab if we haven't copied anything yet
if (write != str || (*read != ' ' && *read != '\t')) {
*(write++) = *read;
}
} while (*(read++));
commentaire Per OP ci-dessous, cette question est une copie exacte de http://stackoverflow.com/questions/122616/painless-way- to-trim-leading-trailing-white-in-c –
Trébuché sur ce post et ne pouvait s'empêcher de remarquer que "remplacer avec rien" revient à supprimer. :) – Arjan