gpt4 book ai didi

c - 从 C 中的输入动态读取字符串

转载 作者:行者123 更新时间:2023-11-30 14:46:42 25 4
gpt4 key购买 nike

我正在尝试读取用户输入的值并将其存储在字符串中。字符串必须是逗号之前或行尾的所有字符,并且需要输出逗号或EOF。

我试图读取每个字符并根据需要在字符串中分配空间,但文件在读取第一个输入后停止。

这是我到目前为止所拥有的:

char read_data(char** str) {
char c = 'n';
int size = sizeof(**str);

int i = 0;
while (((c = getchar()) != COMMA) && (c != NEWLINE)) {
size += sizeof(c);

*str = (char*) realloc(*str, size + 1);
assert(*str);

*str[i] = c;
i++;

}

*str[i] = '\0'; //terminator
return c;
}

int main(int argc, char const *argv[]) {
char* string = NULL;
char left;
left = read_data(&string);
printf("left: %c\n", left);
printf("string: %s\n", string);

free(string);
return 0;
}

我不明白为什么它会坏掉。有人有任何建议/想法吗?

最佳答案

因为array subscripting ([]) has higher precedence than indirection (*) ,当您编写 *str[i] 时,您会得到 *(str[i]) ——第 i 个字符串的第一个字符。但是,您想要 (*str)[i]

这里有四种方式来表达您的意思,所有这些都表示“字符串*str的第i个字符”:

(*str)[i]
str[0][i]
i[*str]
*(*str+i)

关于c - 从 C 中的输入动态读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031082/

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