Я только что столкнулся с чем-то действительно странным. В моей строке char (назовем ее word
) появляются дополнительные буквы, когда я ее печатаю.
Составная буква зависит от:
- длина соответствующего префиксного слова.
- количество пробелов после слова.
Я анализирую word
из line
, который представляет собой всего одну строку из стандартного ввода. Я использую функцию readWord
, чтобы получить word
из line
:
void readWord(char **linePointer, char **wordPointer){
char *line = *linePointer;
char *word = *wordPointer;
while (!isEndOfLine(line) && isLowerCaseLetter(*line)){
*word = *line;
word++;
line++;
}
word++;
*word = '\0';
printf("The retrieved word is: %s.\n", *wordPointer)
*linePointer = line;
}
Мои входы/выходы выглядят так (обратите внимание, что я вызываю функцию readWord
ПОСЛЕ того, как позабочусь о insert
и пробеле между ними):
// INPUT 1 :
insert foo
insert ba // several spaces after 'ba'
// OUTPUT 2:
The retrieved word is foo.
The retrieved word is bas.
// INPUT 1 :
insert foo
insert ba // several spaces after 'bar'
// OUTPUT 2:
The retrieved word is foo.
The retrieved word is bare.
Я думал, правильно ли я распределяю *word
, и думаю, да:
root.word = (char *)malloc(sizeof(char *)); //root is my structure
Кроме того, это вряд ли связано с какими-то ошибками переназначения строки word
, потому что это совершенно ясно в начале функции readWord()
.
Спасибо за любую помощь. Это действительно сложная ошибка для меня, и я не знаю, что еще я могу сделать.
ОБНОВЛЕНИЕ
Оказывается, у меня действительно есть некоторые проблемы с выделением/переназначением, поскольку:
//INPUT
insert foo//no spaces
insert bar //spaces here
//OUTPUT
word variable before calling readWord function: ' '.
The retrieved word is foo.
word variable before calling readWord function: 'insert foo
'.
The retrieved word is bare.
word++
после цикла слишком много - person ryanpattison   schedule 22.04.2015word
не очищается после первой строки, так что это более чем одна ошибка. Я буду работать над тем, что сказал @milleniumbug. - person Mateusz Piotrowski   schedule 22.04.2015while (!isEndOfLine(line) && isLowerCaseLetter(*line))
. И добавьте;
в конце строкиprintf()
. - person Weather Vane   schedule 22.04.2015