如果我的字符串在这个程序中超过 9 个字符,我不应该得到一个错误吗?
// CString.c
// 2.22.11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char *aString = calloc(10, sizeof(char));
if (aString == NULL)
{
return 1;
}
printf("PLEASE ENTER A WORD: ");
scanf("%s", aString);
printf("YOU TYPED IN: %s\n", aString);
//printf("STRING LENGTH: %i\n", strlen(aString));
}
谢谢
吹牛者
最佳答案
您不会收到编译器错误,因为语法是正确的。不正确的是逻辑,并且您得到的是未定义的行为,因为您正在写入超过缓冲区末尾的内存。
为什么是未定义的行为? 嗯,你没有分配那块内存,这意味着它不属于你——你正在侵入一个用胶带封闭的区域。考虑您的程序是否直接在缓冲区之后使用内存。您现在已经覆盖了该内存,因为您超出了缓冲区。
考虑使用这样的大小说明符:
scanf("%9s", aString);
所以你不会溢出你的缓冲区。
关于c - 如何在 C 中使用 calloc()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5100210/