读书人

为啥sizeof的值变了?解决思路

发布时间: 2012-04-17 15:06:33 作者: rapoo

为啥sizeof的值变了?

C/C++ code
void UpperCase(char str[]){    int aaa = sizeof(str) - 1;    int bbb = sizeof(str[0]);    for (int i=0; i<=aaa/bbb - 1; ++i)    {        if ('a' <= str[i] && str[i] <= 'z')        {            str[i] -= ('a'-'A');        }    }}    char str[] = "aBcDe";    int aaa = sizeof(str) - 1;    int bbb = sizeof(str[0]);    cout << "str字符串长度为:" << aaa/bbb << endl;    UpperCase(str);    cout << str << endl;


上面是把"aBcDe"所有的字母变为大写,但是当判断完第三个字母后,sizeof(str)的值变为4,aaa变为3然后就跳出for循环了,这是怎么回事,请高手指点,谢谢!

[解决办法]
额 数组作为参数传递给函数是会弱化为指针的。
[解决办法]
C/C++ code
int aaa = strlen(str) - 1;//sizeof改为strlen吧,因为这儿的str退化为指针了
[解决办法]
传值的时候给数组实际上就是指针,因此sizeof(str)=4
取长度要用strlen而不是sizeof
[解决办法]
template<int SIZE>
void UpperCase(char (&str)[SIZE])
{
int aaa = sizeof(str) - 1;
int bbb = sizeof(str[0]);

for (int i=0; i<=aaa/bbb - 1; ++i)
{
if ('a' <= str[i] && str[i] <= 'z')
{
str[i] -= ('a'-'A');
}
}
}

char str[] = "aBcDe";
int aaa = sizeof(str) - 1;
int bbb = sizeof(str[0]);

cout << "str字符串长度为:" << aaa/bbb << endl;
UpperCase(str);
cout << str << endl;




[解决办法]
被贬成指针了

读书人网 >C++

热点推荐