我尝试了以下方法:*string = toupper(*string);
这仅使指针指向的字符串指针的第一个字符大写。我希望 *pointer 指向的所有字符指针都是大写的。无论如何我可以做到这一点?
您可以这样做,如下所示
char s[] = "hello world";
for ( char *p = s; *p; ++p ) *p = toupper( ( unsigned char )*p );
考虑到您可能不会更改字符串文字。字符串文字是不可变的。例如,如果您在上面的代码中编写
char *s = "hello world";
代替
char s[] = "hello world";
那么程序行为将是未定义的。
你需要像这样遍历每个字符
for (size_t i = 0 ; string[i] != '\0' ; ++i)
string[i] = toupper((unsigned char) string[i]);
您正在观察的行为是因为*
取消引用指针,并且由于您取消引用指针而不增加它,所以您只是设置字符序列的第一个元素。
运算符按以下*
方式处理指针:*(pointer + offset)
等价于pointer[offset]
. 所以*string = toupper(*string)
相当于
string[0] = toupper(string[0]);