Saya baru saja menemukan sesuatu yang sangat aneh. String char saya (sebut saja word
) ternyata ada tambahan huruf saat saya print.
Surat yang dikontatenkan berbeda-beda tergantung pada:
- panjang kata awalan yang tepat.
- jumlah spasi setelah kata.
Saya menguraikan word
dari line
yang hanya berupa satu baris dari input standar. Saya menggunakan fungsi readWord
untuk mengeluarkan word
dari 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;
}
Input/output saya terlihat seperti ini (harap dicatat bahwa saya memanggil fungsi readWord
SETELAH menangani insert
dan spasi di antaranya):
// 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.
Saya berpikir apakah saya mengalokasikan *word
dengan benar dan saya rasa saya melakukannya:
root.word = (char *)malloc(sizeof(char *)); //root is my structure
Selain itu, kemungkinan besar hal ini tidak terkait dengan beberapa kesalahan dalam menetapkan ulang string word
karena sudah sepenuhnya jelas di awal fungsi readWord()
.
Terima kasih atas bantuannya. Ini memang bug yang menantang bagi saya dan saya tidak tahu harus berbuat apa lagi.
PEMBARUAN
Ternyata saya sebenarnya mengalami beberapa masalah dalam pengalokasian/penugasan ulang, karena:
//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++
setelah loop terlalu banyak - person ryanpattison   schedule 22.04.2015word
tidak dihapus setelah baris pertama, jadi hanya ada lebih dari satu bug. Saya akan mengerjakan apa yang dikatakan @milleniumbug. - person Mateusz Piotrowski   schedule 22.04.2015while (!isEndOfLine(line) && isLowerCaseLetter(*line))
ini. Dan tambahkan;
di akhir barisprintf()
. - person Weather Vane   schedule 22.04.2015