【发布时间】:2019-02-01 12:08:46
【问题描述】:
我正在尝试读取用户输入的值并将其存储在字符串中。字符串必须是逗号之前或行尾的所有字符,并且需要输出逗号或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;
}
我不知道它为什么会坏掉。有没有人有任何提示/想法..?
【问题讨论】:
-
int size = sizeof(**str);--size的值将始终为 1,因为str是char **,双重取消引用导致char,并且sizeof char保证永远是 1。 -
@DavidBowling:没错,但不是问题。
-
考虑当第一个字符是
','时会发生什么。*str[i] = '\0';尝试通过未初始化的指针进行分配。
标签: c string dynamic malloc allocation