我尝试了以下内容:*string = toupper(*string);
这只是指针大写的字符串指针的第一个字符。我希望所有指向*指针的字符指针都是大写的。无论如何我可以这样做吗?
答案 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]);