Что я делаю неправильно? он правильно помещает значение e в inputstring, но затем он не меняет позицию, поэтому он продолжает перезаписывать букву

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, но затем он не меняет положение, поэтому он продолжает перезаписывать букву

Пожалуйста, размещайте в заголовке не (два) фактических предложения, а твердое обобщение.

hellow 10.09.2018 10:38
Не переводите результат malloc в C, пожалуйста, прочтите также Как спросить и сделайте свой пост более понятным, а также напишите правильный заголовок
phuclv 10.09.2018 11:17
2
2
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чаще всего вы ошибаетесь в этой строке:

string->inputString = &e;

Это заменяет выделенную вами память указателем на e, поэтому он всегда будет только последним символом. Чтобы добавить e в текущую позицию, вам нужно проиндексировать выделенную вами память следующим образом:

string->inputString[currentStringLenght] = e;

хотя я полагаю, что currentStringLenght, вероятно, должен быть string->stringLength, поэтому вы не потеряете ценность, когда эта часть кода будет выполнена.

И вам также нужно добавить символ NUL, когда вы закончите, чтобы завершить свою строку, иначе произойдет что-то плохое.

string->inputString[currentStringLenght] = '\0';

Другие вопросы по теме