如何在指向字符串的指针上使用toupper()?

时间:2016-01-25 23:12:10

标签: c pointers toupper

我尝试了以下内容:*string = toupper(*string);

这只是指针大写的字符串指针的第一个字符。我希望所有指向*指针的字符指针都是大写的。无论如何我可以这样做吗?

2 个答案:

答案 0 :(得分:2)

您可以执行此操作,如下所示

char s[] = "hello world";

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

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

char *s = "hello world";

而不是

char s[] = "hello world";

然后程序行为将是未定义的。

答案 1 :(得分: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]);