小黄瘦腿霜的用法:一个c的小问题

来源:百度文库 编辑:高校问答 时间:2024/05/01 00:21:29
#include <iostream.h>

void give(char a[21]);

void main()
{
char A[1];
give(A);
cout << A;
}

void give(char a[21])
{
cin >> a;
}

为什么我输了4个字母运行也不会报错,输了5 个就报错??
我的意思是为什么定义[1]
却可以输4个字母?

如果说[1]可以接受4个字母
那为什么改成[2]
还是和上面的情况一样。

溢出了,A只有一个字节,可是你却输入4个或5个字母,其实输入4个字母时已经就溢出了,只是没有覆盖到重要的内存区,输入5个时可能覆盖到了下面要执行的程序的代码区了,所以就会出错。那个char a[21]里的21是没有意义的,a还是主函数里的定义的那么大,1个字节。

char A[1]; 和void give(char a[21]) 是有对应性的!

因为 void give(char a[21]) 参数可以接受是指针或数组!
这样,char A[1] 就必须是指针或是数组了!类型才能对应
char A[1] ,数组是分配内存,将内存地址给A,,当然可以转换成指针,但char A 就不能了,它是一个类型是char!

为什么我输了4个字母运行也不会报错,输了5 个就报错??
这个有一点同意楼上的说法!但实际上还是要看cin 的情况!
CIN 是当按下回车是就表示结束了, \r\n\0 ,两个字符表示回车 (\r\n) ,加一个结束符 \0 就三个字符了, 加上你定义一个A[1],那就是四个了!在输入第五个就会 溢出了

1.函数参数是不能传数组的。a[21]写出来跟a[]或者*a是等价的。

2.C++不检查数组下标。
就是说数组下标溢出了C++也不管不问,直到你一直往后修改修改到出错为止。

#include <iostream.h>

void give(char *a);

void main()
{
char A[21];
give(A);
cout << A;
}

void give(char *a)
{
cin >> a;
}
这样可以的,函数传递变量如果不要返回变量就用指针的方式。

内存溢出了吧