A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JAH562 中级黑马   /  2014-11-2 22:33  /  1397 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>
void main()

{
char str[100];


char *demp=str;
gets(str);

while(*str!='\0'){

if(*str>='a' && *str<='z'){
        *str-='a'-'A';
}
str++;

}

运行时,str++  报错怎么 回事啊    我想把输出的字符都变成大写

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

5 个回复

倒序浏览
可能错在char *demp=str;
回复 使用道具 举报
char *demp=str;在这里你是定义了一个指针来指向str这个数组的,所以在循环判断的时候是demp++,指针依次指向下一个字符来进行判断的

  1. #include <stdio.h>
  2. void main()

  3. {
  4.     char str[100];
  5.    
  6.    
  7.     char *demp=str;
  8.     gets(str);
  9.    
  10.     while(*demp!='\0')
  11.     {
  12.         
  13.         if(*demp>='a' && *demp<='z')
  14.         {
  15.             *demp-=('a'-'A');
  16.         }
  17.         
  18.         printf("%c",*demp);
  19.         demp++;

  20.     }
  21.     printf("\n");
  22. }
复制代码
回复 使用道具 举报
本帖最后由 雪寒 于 2014-11-3 10:33 编辑

首先你得明白指针和一维数组的区别

指针定义: 指针是包含内存地址的变量,一般的指针变量直接包含特定的值,指针变量包含的是某一特定数据类型的内存地址。

一维数组的定义: 数组是一组连续的内存位置,它们都具有相同的名称和类型。数组名表示数组的首地址。

定义上的区别: 指针是个变量,可以进行加或减运算,可以改变其指向的内存地址值,而数组是个常量,其内存地址的值不可改变。

可见,指针变量里面存放的是地址,数组名表示数组的首地址。也就是说str不可改变,不能str++;要想用指针遍历数组,得把数组首地址赋给指针变量,让指针变量进行加减运算。也就是你写的char *demp=str;然后通过指针变量去遍历数组就OK了,完整程序如下:

  1. #include <stdio.h>
  2. void main()

  3. {
  4.         char str[100];

  5. char *demp=str;
  6. gets(str);
  7. while(*demp!='\0'){

  8. if(*demp>='a' && *demp<='z'){
  9.         *demp-='a'-'A';
  10. }
  11.   demp++;
  12. }
  13. }
复制代码


回复 使用道具 举报
学习 学习
回复 使用道具 举报
刚发现 是这个问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马