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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 千年的泪 中级黑马   /  2014-5-28 23:29  /  1071 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 千年的泪 于 2014-5-29 10:45 编辑

这是我写的一个把输入的小写字符串转换成大写字符串的程序,请问有什么问题吗?
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #define SIZE 30
  5. int main(void)
  6. {
  7.         char str1[SIZE];
  8.         char *str2;
  9.         printf("请输入字符串:");
  10.         scanf("%s", str1);
  11.         printf("您输入的字符串是:");
  12.         printf("%s\n", str1);
  13.     int i = 0;
  14.     while (str1[i] != '\0')
  15.     {
  16.         str1[i] = toupper(str1[i]);
  17.         i++;
  18.     }
  19.     strcpy(str2, str1);
  20.     int j = 0;
  21.     while (str2[j])
  22.     {
  23.         printf("%c", str2[j]);
  24.         j++;
  25.     }
  26.     printf("\n");
  27.         return 0;
  28. }
复制代码

4 个回复

倒序浏览
这样改就没错了

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 30
int main(void)
{
        char str1[SIZE];
        char str2[SIZE];//此处用定义一个字符串数组
        printf("请输入字符串:");
        scanf("%s", str1);
        printf("您输入的字符串是:");
        printf("%s\n", str1);
    int i = 0;
    while (str1[i] != '\0')
    {
        str1[i] = toupper(str1[i]);
        i++;
    }
    strcpy(str2, str1);
    int j = 0;
    while (str2[j])
    {
        printf("%c", str2[j]);
        j++;
    }
    printf("\n");
        return 0;
}
回复 使用道具 举报
回答:指针str2没有初始化,如果执行strcpy()函数
str1中的字符串会被复制到一个随机的内存区域,这是不可以的。
声明一个字符数组将会为字符串分配存储空间,但是声明一个指向字符的指针只会为该指针分配存储空间。
按照你的意思程序修改为:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>

  4. #define SIZE 30

  5. int main(void)
  6. {
  7.         char str1[SIZE];
  8.         char *str2;
  9.     char str3[SIZE];    // 分配一段名为str3的存储空间,等一下让指针str2指向它。
  10.     str2 = str3;        // 将str3字符数组首元素的地址赋值给字符指针str2。
  11.    
  12.         printf("请输入字符串:");
  13.         scanf("%s", str1);
  14.         printf("您输入的字符串是:");
  15.         printf("%s\n", str1);
  16.    
  17.     strcpy(str2, str1);
  18.    
  19.     while (*str2 = toupper(*str2)) {
  20.         putchar(*str2++);
  21.     }
  22.     putchar('\n');
  23.    
  24.         return 0;
  25. }
复制代码


回复 使用道具 举报 1 0
明白了{:3_64:}
回复 使用道具 举报
学习中。。。{:2_41:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马