为啥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;
[解决办法]
被贬成指针了