我究竟做错了什么?它正确地将e的值放在inputString中,但它不会改变位置,因此它会一直覆盖字母

问题描述 投票:-2回答:1
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中,但它不会改变位置,因此它会一直覆盖字母

c
1个回答
1
投票

大多数情况下你做错的主要是这条线:

string->inputString = &e;

那是用e指针替换你分配的内存,这就是为什么它只会是最后一个字符。要将e添加到当前位置,您需要索引到您已分配的内存,如下所示:

string->inputString[currentStringLenght] = e;

虽然我认为currentStringLenght可能应该是string->stringLength,所以当代码的这部分完成时你不会失去价值。

当你完成你的字符串时你还需要添加一个NUL字符,否则会发生坏事。

string->inputString[currentStringLenght] = '\0';
© www.soinside.com 2019 - 2024. All rights reserved.