我是 C 的新手。抱歉,如果这已经被回答了,我找不到一个直接的答案,所以我们开始吧..
我试图了解 malloc() 在 C 中的工作原理。我有以下代码:
#define MAXLINE 100
void readInput(char **s)
{
char temp[MAXLINE];
printf("Please enter a string: ");
scanf("%s", temp);
*s = (char *)malloc((strlen(temp)+1)*sizeof(char)); // works as expected
//*s = (char *)malloc(2*sizeof(char)); // also works even when entering 10 chars, why?
strcpy ((char *)*s, temp);
}
int main()
{
char *str;
readInput(&str);
printf("Your string is %s\n", str);
free(str);
return 0;
}
问题是当我像这样调用 malloc() 时,为什么程序不会崩溃(或至少剥离剩余的字符):
*s = (char *)malloc(2*sizeof(char)); // also works even when entering 10 chars, why?
如果我输入的字符串超过两个字符,这不会导致缓冲区溢出吗?据我了解 malloc(),它为数据分配了一个固定空间,因此肯定只为两个字符分配空间将使字符串最多为一个可用字符('0\' 是第二个),但它仍在打印输入所有 10 个字符。
PS如果这有什么不同,我正在使用Xcode。
谢谢,西蒙