我正在学习 C: How to program by Dietel。在指针章节中,有这个示例代码:
#include <stdio.h>
#include <ctype.h>
void convertToUppercase(char *sPtr);
int main( void )
{
char string[] = "cHaRaCters and $32.98";
printf( "The string before conversion is: %s", string );
convertToUppercase( string );
printf( "\nThe string after conversion is: %s\n", string );
}
void convertToUppercase(char *sPtr)
{
while(*sPtr != '\0') {
*sPtr = toupper(*sPtr);
++*sPtr;
}
}
当我编译它时,没有问题。但是当我运行它时,什么也没有发生。我不知道是什么问题!
函数中有错别字
void convertToUppercase(char *sPtr)
{
while(*sPtr != '\0') {
*sPtr = toupper(*sPtr);
++*sPtr;
^^^^^^^^
}
}
而是必须有
++sPtr;
^^^^^^^
此表达式++*sPtr
递增指针指向的字符,sPtr
而此表达式++sPtr
递增指针本身。
然而,该代码有几个缺点。
C 标准中有一个字符串函数约定,它们应该返回指向目标字符串的指针。所以最好像这样声明函数
char * convertToUppercase(char *sPtr);
该函数还toupper
依赖于它的参数可以表示为无符号字符。
来自 C 标准(7.4 字符处理)
1 标题声明了几个对字符分类和映射有用的函数。198)在所有情况下,参数都是一个 int,其值应表示为无符号字符或应等于宏 EOF 的值。如果参数有任何其他值,则行为未定义。
所以写起来会更正确
*sPtr = toupper( ( unsigned char )*sPtr);
而一个for
循环会比更合适while
在这种情况下循环。
考虑到所有这些,该功能可以通过以下方式实现
char * convertToUppercase(char *sPtr)
{
for ( char *p = sPtr; *p != '\0'; ++p ) {
*p = toupper( ( unsigned char )*p );
}
return sPtr;
}
并称之为
printf( "\nThe string after conversion is: %s\n", convertToUppercase( string ) );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句