typedef struct {
char *inputString;
int stringLenght;
} InputString;
string = (InputString *) malloc(NUMOFSTRING * sizeof(InputString));
string->inputString = (char *)malloc(STRINGLENGHT);
currentString = 1;
scanf("%c", &e);
while (e == ' ' || e == '\n') {
scanf("%c", &e);
}
while (!feof(stdin)) {
currentStringLenght = 1;
while (e != '\n' && e != ' ') {
string->inputString = &e;
currentStringLenght++;
if (currentStringLenght > STRINGLENGHT) {
string->inputString = (char*) realloc(string->inputString, currentStringLenght);
string->inputString = string->inputString + (currentStringLenght - 1);
} else {
string->inputString ++;
scanf("%c", &e);
}
}
我究竟做错了什么?它正确地将e的值放在inputString中,但它不会改变位置,因此它会一直覆盖字母
大多数情况下你做错的主要是这条线:
string->inputString = &e;
那是用e
指针替换你分配的内存,这就是为什么它只会是最后一个字符。要将e
添加到当前位置,您需要索引到您已分配的内存,如下所示:
string->inputString[currentStringLenght] = e;
虽然我认为currentStringLenght
可能应该是string->stringLength
,所以当代码的这部分完成时你不会失去价值。
当你完成你的字符串时你还需要添加一个NUL字符,否则会发生坏事。
string->inputString[currentStringLenght] = '\0';