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, но затем он не меняет положение, поэтому он продолжает перезаписывать букву
malloc
в C, пожалуйста, прочтите также Как спросить и сделайте свой пост более понятным, а также напишите правильный заголовок
Чаще всего вы ошибаетесь в этой строке:
string->inputString = &e;
Это заменяет выделенную вами память указателем на e
, поэтому он всегда будет только последним символом. Чтобы добавить e
в текущую позицию, вам нужно проиндексировать выделенную вами память следующим образом:
string->inputString[currentStringLenght] = e;
хотя я полагаю, что currentStringLenght
, вероятно, должен быть string->stringLength
, поэтому вы не потеряете ценность, когда эта часть кода будет выполнена.
И вам также нужно добавить символ NUL, когда вы закончите, чтобы завершить свою строку, иначе произойдет что-то плохое.
string->inputString[currentStringLenght] = '\0';
Пожалуйста, размещайте в заголовке не (два) фактических предложения, а твердое обобщение.