【发布时间】:2016-08-06 21:28:35
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int size=10;
char string1[50];
char *string2;
string2=(char *)malloc(size*sizeof(char));
fgets(string1,10,stdin);
printf("%s",string1);
fgets(string2,10,stdin);
printf("%s",string2);
}
这段代码中有两个字符串,一个是数组,另一个是使用指针动态创建的。
- 如果我输入的 string1 小于 50 且 string2 小于 10 将浪费未填充的空间,如果是这样如何减小大小。
- 如果字符串 2 malloc 大小参数为 10,fgets 大小参数为 10,如果我将大小增加到大于 malloc 大小的 fgets(string2,50,stdin) 会发生什么?
- 如何计算每种情况下输入字符串的最终大小?我使用了 sizeof 运算符,但它给出了 string1 和 string2 的硬编码大小分别为 50 和 10
- 还有其他更好的方法来创建动态字符串吗?
【问题讨论】:
-
1) 是的。空间将被浪费。答:减少分配。至于问题标题:什么都没有。
-
2)。碰撞。 3)问题不正确。第二个字符串的大小不是 10。它是指针的大小——通常是 4 或 8。
-
@WeatherVane 感谢您的意见:)
-
@WeatherVane:不,字符串不是指针。
sizeof string2是指针的大小,但string2不是字符串。 -
@KeithThompson 这就是我说的,
sizeof string2是指针的大小。