下面的代码应该返回源的大写字符串。它可以工作,但不转换字符串。不知道是怎么回事。
char *StrUpper (char *s) {
int i = 0;
char *t = &s [i];
while (*t) {
if ((*t > 0x5a) && (*t < 0x7b)) t = (t - 32);
t = &s [i++];
}
return (s);
}
int main () {
printf ("%s\n", StrUpper ("lower case string"));
return (0);
}发布于 2014-09-09 18:00:37
字符串文字是指向常量字符数组的常量指针。换句话说,字符串文字是只读的。
试图修改常量数据会导致http://en.wikipedia.org/wiki/Undefined_behavior。如果您的程序有未定义的行为,那么它的任何行为都不能被信任。
发布于 2014-09-09 18:00:01
您的代码中有一些问题:
发布于 2014-09-09 18:04:39
你也可能想要改变
t = &s[i++];至
t = &s[++i];因为,i++首先将当前i值分配给索引,然后执行增量,最后第一次再次处理相同的索引。
https://stackoverflow.com/questions/25751005
复制相似问题