-1

我尝试了以下方法:*string = toupper(*string);

这仅使指针指向的字符串指针的第一个字符大写。我希望 *pointer 指向的所有字符指针都是大写的。无论如何我可以做到这一点?

4

2 回答 2

2

您可以这样做,如下所示

char s[] = "hello world";

for ( char *p = s; *p; ++p ) *p = toupper( ( unsigned char )*p );

考虑到您可能不会更改字符串文字。字符串文字是不可变的。例如,如果您在上面的代码中编写

char *s = "hello world";

代替

char s[] = "hello world";

那么程序行为将是未定义的。

于 2016-01-25T23:13:52.937 回答
1

你需要像这样遍历每个字符

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]);
于 2016-01-25T23:13:34.987 回答