【发布时间】:2016-04-07 12:25:14
【问题描述】:
我有一点问题。 我会解释一下,我正在尝试为结构内的字符串创建动态内存分配并打印它。 问题是,它不关心我动态分配的大小。
例如,我创建了一个大小为 6 的字符串,但它让我插入 15 个字符并全部打印出来。
所以基本上,它不会限制我的字符串大小,为什么会这样?
typedef struct{
int grade;
int id;
int arr[5];
char *str;
}student;
int main(){
puts("How many many letters in char?\n");
scanf("%d", &num);
getchar();
student1.str = (char *)malloc(sizeof(char)*num+1);
gets(buffer);
strcopy(student1.str, buffer);
}
顺便说一句,我尽量让你们/女士们清楚代码,只是我需要的主要内容。我知道我没有释放内存或检查分配是否失败等...
【问题讨论】:
-
strcopy?认真的吗? -
这就是 C 的工作方式。该语言没有自动边界检查。通过访问越界内存,您正在调用未定义的行为。 UB 意味着不能依赖任何特定的行为(它可能看起来有效,可能会输出垃圾,可能会崩溃,可能会冻结等)。
-
这与结构无关,甚至与动态分配无关。试试
char s[5]; strcpy(s, "Hello world! This is a really long string, much longer than the 5 characters allocated for this variable."); printf("%s\n", s);- 有合理的机会它会打印完整的字符串,然后崩溃。 (当然不能保证)
标签: c string dynamic-memory-allocation