gpt4 book ai didi

c - 我究竟做错了什么?它正确地将 e 的值放入 inputString 但随后它不会改变位置,因此它会不断覆盖该字母

转载 作者:行者123 更新时间:2023-11-30 20:19:00 24 4
gpt4 key购买 nike

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';

关于c - 我究竟做错了什么?它正确地将 e 的值放入 inputString 但随后它不会改变位置,因此它会不断覆盖该字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52253637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com