我刚刚遇到了一些非常奇怪的事情。当我打印它时,我的字符串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.
答案 0 :(得分:3)
永远不要相信你的输入,所以检查空格是否可以转到单词的开头。
你增加了一个词,就像@rpattiso所说的那样。
我怀疑你的内存分配(你没有向我们展示你的所有代码):
root.word = (char *)malloc(sizeof(char *));
为指针分配空间,但不为字符本身分配空间。 readWord可以做到这一点。
以下改编版应该有效(更新):
void readWord(char **linePointer, char **wordPointer){
char *line = *linePointer;
int i;
while (!isEndOfLine(line) && !isLowerCaseLetter(*line)) line++; // go to begin of word
*linePointer= line;
while (!isEndOfLine(line) && isLowerCaseLetter(*line)) line++; // go to end of word
i= line - *linePointer; // allocate room for word and copy it
*wordPointer= malloc((i+1) * sizeof(char));
strncpy(*wordPointer, *linePointer, i);
(*wordPointer)[i]= '\0;
printf("The retrieved word is: %s.\n", *wordPointer);
*linePointer = line;
}