【发布时间】:2015-04-21 17:10:10
【问题描述】:
#include<stdio.h>
#define SIZE 3
int main()
{
char *arr[5];
for(i = 0; i < 5; i++) {
arr[i] = (char *)malloc(SIZE * sizeof(char));
scanf("%s",arr[i]);
}
for(i = 0; i < 5; i++) {
printf("%s",arr[i]);
}
return 0;
}
在上面的代码中,我正在扫描超过 3(大小)个字符,但它工作正常。有什么问题?
【问题讨论】:
-
你使用的是linux?
-
未定义的行为。它包括看似明智的行为。
-
@Karthikeyan.R.S 是的,我正在使用 linux
-
@RSahu 你能解释一下吗
-
当您调用
malloc(3)时,您可能会得到malloc(16)的等价物,因为标准库实现不希望将内存分成这么小的块。但另一种实现可能只给你3字节。在第一种情况下,您最多可以阅读 15 个字符,而在第二种情况下,您不会。