我究竟做错了什么?它将e的值正确地输入到inputString中,但是它不会改变位置,因此会不断覆盖字母

时间:2018-09-10 08:15:14

标签: c

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中,但是它不会改变位置,因此会不断覆盖字母

1 个答案:

答案 0 :(得分:1)

您最主要的错误在于此行:

string->inputString = &e;

这将用指向e的指针替换您分配的内存,这就是为什么它永远只是最后一个字符的原因。要将e添加到当前位置,您需要像这样对已分配的内存进行索引:

string->inputString[currentStringLenght] = e;

尽管我认为currentStringLenght应该是string->stringLength,所以在完成这部分代码后您不会丢失值。

完成字符串后,还需要添加NUL字符,否则会发生不良情况。

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