5

问答题 5 /6

以下代码中的两个 sizeof 用法有问题吗?
void UpperCase( char str[]) // 将 str 中的小写字母转换成大写字母 
{ 
    for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i ) 
        if( 'a'<=str[i] && str[i]<='z' ) 
            str[i] -= ('a'-'A' ); 
} 
char str[] = "aBcDe"; //含有 6 个字符,最后一个为结束符 
cout << "str 字符长度为: " << sizeof(str)/sizeof(str[0]) << endl; 
UpperCase( str ); 
cout << str << endl; 

参考答案

在调用 UpperCase 的函数时,实际传入的是一个地址指针。在函数参数中,char str[]与 char *效果是一样的,这样的话实际上 uppercase 中的 sizeof(str)实际上是求指针占了多少 个字节,是 4 而不是字符的长度 6.解决办法:需要给 UpperCase 函数加一个参数,void UpperCase( char str[],int n);这个 n 是传进来的数组的长度。 
void UpperCase( char str[],int n) // 将 str 中的小写字母转换成大写字母 
{ 
    for( size_t i=0; i<n; ++i ) 
    if( 'a'<=str[i] && str[i]<='z' ) 
        str[i] -= ('a'-'A' ); 
} 

牛客网,程序员必备求职神器
QQ群:169195721
微 信:www_nowcoder_com 关注
微 博:牛客网 关注

扫一扫,把题目装进口袋