首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符*字符串转换为上字符

将字符*字符串转换为上字符
EN

Stack Overflow用户
提问于 2014-09-09 17:57:58
回答 4查看 144关注 0票数 0

下面的代码应该返回源的大写字符串。它可以工作,但不转换字符串。不知道是怎么回事。

代码语言:javascript
复制
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);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-09 18:00:37

字符串文字是指向常量字符数组的常量指针。换句话说,字符串文字是只读的。

试图修改常量数据会导致http://en.wikipedia.org/wiki/Undefined_behavior。如果您的程序有未定义的行为,那么它的任何行为都不能被信任。

票数 4
EN

Stack Overflow用户

发布于 2014-09-09 18:00:01

您的代码中有一些问题:

  1. 您忘记取消赋值中的字符串: T=(t-32); 应该是 *t =(*t-32);
  2. 你不能检查正确的范围: 如果((*t > 0x5a)和(*t < 0x7b)) 应该是 如果((*t > 0x6a)和(*t < 0x7b)) 或者,更好的 如果((*t >= 'a') && (t <= 'z'))
  3. 你把第一个角色翻了两遍: T= &s i++; 应该是 T= &s ++i; 或者简单的 t++;
票数 2
EN

Stack Overflow用户

发布于 2014-09-09 18:04:39

你也可能想要改变

代码语言:javascript
复制
  t = &s[i++];

代码语言:javascript
复制
t =  &s[++i];

因为,i++首先将当前i值分配给索引,然后执行增量,最后第一次再次处理相同的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25751005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档