标题:strupr 不是将字符串转换为大写的吗?为什么一用程序停止工作呢?
只看楼主
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
结帖率:100%
已结贴  问题点数:20 回复次数:4 
strupr 不是将字符串转换为大写的吗?为什么一用程序停止工作呢?
直接上代码,求大神指点

程序代码:
//程序判断输入是不是行星名,并返回提示语。
//例:命令行输入planet mercury运行程序,程序输出mercury is planet 1
//例:命令行输入planet sun运行程序,程序输出sun is not a planet
//注:忽略输入的命令行参数的大小写
//程序名为planet.c

#include <stdio.h>
#include <string.h>

#define NUM_PLANETS 9

//将输入的命令行参数与一个planets字符数组依次比较
int main(int argc, char *argv[])
{
    char *planets[] = {"Mercury", "Venus", "Earth",
                        "Mars", "Jupiter", "Saturn",
                        "Uranus", "Neptune", "Pluto"};
    int i, j;

    for (i = 1; i < argc; i++){
        for (j = 0; j < NUM_PLANETS; j++)
            if (strcmp(strupr(argv[i]), strupr(planets[j])) == 0){    //这里只要把两个strupr都删除程序就能正常工作,否则就停止工作。但是删除strupr后输入的命令行参数就有大小写的要求了。为什么不能使用strupr呢?
                printf("%s is planet %d\n", argv[i], j + 1);
                break;
            }

        if (j == NUM_PLANETS)
            printf("%s is not a planet\n", argv[i]);
    }

    return 0;
}

搜索更多相关主题的帖子: 运行程序 planet 字符串 color 
2014-09-30 14:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:20 
strupr会修改传入的字符串,但你的planets数组中都是常量字符串,不允许修改。这导致内存访问错误程序崩溃。

解决方法1、将planets声明为二维字符数组使其可修改,缺点是会浪费一部分空间。

解决方法2、将planets数组中的字符串直接写成大写的,这样就压根不需要对它进行转换。这样多好

重剑无锋,大巧不工
2014-09-30 15:16
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
得分:0 
回复 2 楼 beyondyf
谢谢大神!修改后程序能运行了!

假设输入为planet Mercury,argv[1]就是"Mercury"字符串,planets[1]也是"Mercury"字符串,为什么后者是字符串常量,前者就不是呢?


[ 本帖最后由 muyoucumian 于 2014-9-30 16:06 编辑 ]
2014-09-30 15:55
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
得分:0 
回复 3 楼 muyoucumian
常不常量看如何对待而已,要是愿意也可以修改页属性来使常量变为变量...
name: 修改字符串常量
site: https://bbs.bccn.net/thread-432837-1-1.html




[ 本帖最后由 pycansi 于 2014-10-3 21:19 编辑 ]


莫问前尘有愧,但求今生无悔
2014-10-03 21:17
dcl2014
Rank: 4
等 级:业余侠客
威 望:1
帖 子:58
专家分:273
注 册:2014-9-20
得分:0 
好的 学习了
2014-10-04 09:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436773-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.307218 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved