我试图通过从用户接受它来分配动态字符串。我想用一个函数来做。我正在尝试实现以下代码,但它无法正常工作。
\0
答案 0 :(得分:3)
许多问题:
内存大小太小了。
while(c!='\n')
首先测试c
,即使它未初始化。
string()
应该传递char *
的地址,如string(char **)
使用size_t
时,最好使用int
而不是strlen()
。
次要:
未检测到EOF。使用int c
而不是char c
来帮助检测。
每个循环realloc()
当然效率低下。
投放malloc()/realloc()
不必要。
检查是否有内存不足。
使用int main(void)
而不是int main()
来实现可移植性。
size_t string(char **str) {
assert(str);
int c;
size_t i = 0;
size_t size = 0;
*str = NULL;
printf("Enter String : ");
while((c = getc(stdin)) !='\n' && c != EOF) {
if (i == size) {
size *= 2 + 1; // double the size each time
*str = realloc(*str, size);
assert(*str);
}
(*str)[i] = c; // store read character by making pointer point to c
i++;
}
*str = realloc(*str, i+1); // right-size the string
assert(*str);
(*str)[i] = '\0'; // at the end append null character to mark end
printf("\nThe entered string is : %s",*str);
return i;
}
答案 1 :(得分:1)
您需要将引用传递给指针(int string(char **str)
),因为您正在更改函数内str
的值。
在main
中,您应该致电string(&str)