Застрял с синтаксисом C - PullRequest
       10

Застрял с синтаксисом C

0 голосов
/ 16 февраля 2010

Я пытаюсь удалить пробелы в конце массива символов (строки).

Это псевдокод того, что я делаю, но он продолжает удалять всю строку:

if(string length - 1 != a space)
    return

В противном случае он должен равняться пробелу, поэтому

while *mypointer-- != a space
//This should loop back to where there is a character.

Вне цикла while я добавляю его к указателю, выполняя

mypointer ++;

и затем установите mypointer '\ 0' для обозначения конца строки.

Я делаю что-то в корне неправильно, но никак не могу понять это. Что бы это могло быть?

Ответы [ 5 ]

5 голосов
/ 16 февраля 2010

Немного ясновидения:

while(*mypointer == a space) {
    --mypointer;
}
mypointer[1] = '\0';

Обратите внимание, что это == пробел, не!


Редактировать: Если бы я собирался написать это, я бы действительно использовал что-то вроде:
#include <string.h>
...

char *mypointer = strrchr(string, ' ');
if (mypointer) *mypointer = '\0';
1 голос
/ 16 февраля 2010

Возможно, вы устанавливаете mypointer на \0, что указывает на NULL Вам нужно установить mypointer[1] на \0. Кроме того, убедитесь, что вы делаете правильные вещи для следующих крайних случаев:

  • когда строка содержит все пробелы,
  • когда длина строки равна 0.
0 голосов
/ 16 февраля 2010

Взгляните на этот код , который выполняет точную работу по удалению пробелов из конца строки ... это из архива Snippets - это познавательная вещь, чтобы посмотреть, что происходит при переходе через отладчик и очень полезную коллекцию кода C также ...

0 голосов
/ 16 февраля 2010

Возможно небольшое улучшение:

while(*mypointer == a space) {
  *mypointer-- = '\0';
}
0 голосов
/ 16 февраля 2010

Без кода мы можем только догадываться:

Как инициализируется mypointer?

Вы уверены в состоянии цикла while? Должно ли это быть, пока «последний символ - пробел»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...