字符数组分配不起作用

Char array assignment not working

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

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;
}

您正在 return 增加指针,您不需要 return 任何东西,只需修改字符串

void strtoupper(char *string)
{
    while (*string != '[=10=]') 
    {
        *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]); 
}
while (*string++ = toupper(*string));

考虑到您的函数 returns 第 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 ) );