我写了这个函数,尽管它不起作用:
char *alternateCase (char *string)
{
while (*string)
{
if (islower(*string)) *string = toupper(*string);
else if (isupper(*string)) *string = tolower(*string);
string++;
}
return string;
}
所以,我试着添加一个指向字符串变量的指针并且它有效,第二个函数如下:
char *alternateCase (char *string)
{
char *ptr= string;
while (*ptr)
{
if (islower(*ptr)) *ptr = toupper(*ptr);
else if (isupper(*ptr)) *ptr = tolower(*ptr);
ptr++;
}
return string;
}
我不完全理解为什么第一个功能不起作用,而第二个功能起作用。在我看来,他们是相同的! 为什么第二个是正确的,第一个是错的?
答案 0 :(得分:3)
您需要将指针保存到字符串的开头。在第一个示例中,您将更改作为函数参数接收的指针。因此,您需要保留原始指针并使用临时指针*ptr
,如第二个示例所示。
或者,您可以使用第一个示例,但应该保存字符串长度
int length = strlen(string);
然后
return (char*)(string - length);
答案 1 :(得分:1)
第一个发布的示例代码不起作用的原因是因为这两行。
string++;
and
return string;
当while循环退出时,指针string
指向终止输入参数字符串的NUL字节。
返回该修改的指针会导致调用者接收指向NUL字节的指针。不是我们需要的。