我编写了这个函数,尽管它没有工作:
char *alternateCase (char *string)
{
while (*string)
{
if (islower(*string)) *string = toupper(*string);
else if (isupper(*string)) *string = tolower(*string);
string++;
}
return string;
}因此,我尝试向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;
}我不完全理解为什么第一个函数不能工作,而第二个功能却起作用。在我看来,他们是一样的!为什么第二个是对的,第一个是错的?
发布于 2017-03-27 23:12:28
您需要保存指向字符串开头的指针。在第一个示例中,您正在更改作为函数参数接收的指针。因此,您需要保留原始指针,并使用临时指针*ptr,如第二个示例所示。
或者,您可以使用第一个示例,但是应该保存字符串长度。
int length = strlen(string);然后
return (char*)(string - length);发布于 2017-03-28 15:15:13
第一次发布的示例代码不起作用的原因是这两行。
string++;
and
return string;当while循环退出时,指针string指向终止输入参数字符串的NUL字节。
返回修改后的指针,调用方将收到指向NUL字节的指针。而不是需要什么。
https://stackoverflow.com/questions/43057893
复制相似问题