字符数组分配不起作用
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 ) );
以下代码将字符串中的所有小写字符转换为大写。但是,它不会用计算出的大写字符替换小写字符。
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 ) );