字符数组分配不起作用

时间:2015-01-11 11:30:09

标签: c pointers

以下代码将字符串中的所有小写字符转换为大写。但是,它不是用计算大写字符替换小写字符。

static char * strtoupper(char * string, int size)
{
char c;
for(int i = 0; i< size; i++)
{
    if(islower((int) (*string)) != 0)
    {
        c = (char) toupper(*string);
        *string = c;
    }
    ++string;
}
return string;
}

3 个答案:

答案 0 :(得分:3)

您正在返回递增的指针,您不需要返回任何内容,只需修改字符串

即可
void strtoupper(char *string)
{
    while (*string != '\0') 
    {
        *string = toupper(*string); 
        ++string;
    }
}

如果你想传递字符串的长度,例如它不是空终止

void strtoupper(char *string, size_t size)
{
    size_t i;
    for (i = 0 ; i < size ; ++i)
        string[i] = toupper(string[i]); 
}

答案 1 :(得分:1)

考虑到你的函数在第n个(即大小)元素之后返回一个指针,通常情况下它可以是终止零。

我会按照以下方式编写函数

static char * strtoupper( char *string, size_t size )
{
    for( size_t i = 0; i < size; i++ )
    {
        if( islower( ( unsigned char )string[i] ) )
        {
            string[i] = toupper( ( unsigned char )string[i] );
        }
    }

    return string;
}

此外,您可能无法将字符串文字作为参数传递给函数,因为您可能无法修改字符串文字。任何修改字符串文字的尝试都会导致程序的未定义行为。

所以例如这个函数的调用是无效的

strtoupper( "Hello", 5 );

但这是有效的

char s[] = "Hello";

strtoupper( s, strlen( s ) );

答案 2 :(得分:-3)

while (*string++ = toupper(*string));