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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 学以致用表初衷 于 2016-1-15 10:05 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[]) {
  4.     char *guoJia[]={"Ameirica","japan","korea","china","africa","freanch"};
  5.     char lenth=strlen(*guoJia); //这里 lenth 输入的是8  但是下边就运算不了。
  6.                                                      //如果改成 char lenth =strlen(guojia); lenth =2; 下边输出的就是 ameirica 和 japan 不符合运算了
  7.     printf("%d\n",lenth);
  8.    

  9.     for (int i=0; i<lenth-1; i++)
  10.         {
  11.         for (int j=0; j<lenth-i-1; j++)
  12.         {
  13.             
  14.             if ((strcmp(guoJia[j], guoJia[j+1]))>0)
  15.             {
  16.                 char *ch;
  17.                
  18.                 ch =guoJia[j];
  19.                 guoJia[j]=guoJia[j+1];
  20.                 guoJia[j+1]=ch;

  21.             }
  22.             
  23.                
  24.                
  25.         }
  26.             
  27.         }
  28.     for (int j=0; j<lenth; j++)
  29.     {
  30.         printf("%s\n",guoJia[j]);
  31.     }
  32.    

  33.        }
复制代码

16 个回复

正序浏览
15931110616 发表于 2016-1-19 15:40
char lenth=strlen(*guoJia);   为什么这里lenth是char类型的?

因为你输入的时字符串啊
回复 使用道具 举报
guyuexing 来自手机 中级黑马 2016-1-19 17:52:11
16#
学习了!
回复 使用道具 举报
char lenth=strlen(*guoJia);   为什么这里lenth是char类型的?
回复 使用道具 举报
不好意思 我想错了 不是那样的
回复 使用道具 举报
char   lenth =strlen(*name);  把这里的*去掉试试 我感觉是这个原因  。*name就是a[0].是个地址。 所有的地址存储都是八个字节 ,如果你printf之后   strlen是8  的话   有可能就是这个原因
回复 使用道具 举报
strlen是求字符串长度的,不能用来求数组长度啊,数组长度length = sizeof (guojia)/sizeof (char * )
回复 使用道具 举报

数组的长度不是那样求的,,所以在循环的时候超出了数组长度范围,发生访问了坏的内存,也就是越界了

评分

参与人数 1黑马币 +2 收起 理由
AUASBUB + 2 赞一个!

查看全部评分

回复 使用道具 举报
.....没人理我了啊。。
回复 使用道具 举报
15223245 发表于 2016-1-15 13:13
数组的长度为6 。。。。

char  lenth =sizeof(guoJia)/sizeof(guoJia[0]);

666666~~给你个赞。
那哥们 给我分析一下。
为什么strlen 求出来的就是8.
并且不允许进行下一步了呢。
你看我三楼 在课堂上写的那个。
那个和我这个 感觉没什么区别啊。。。
回复 使用道具 举报
学以致用表初衷 发表于 2016-1-15 11:38
那我应该怎么改正啊?
我已经求出来 数组长度为8了。。。
为什么if那里就出错呢 ...

数组的长度为6 。。。。

char  lenth =sizeof(guoJia)/sizeof(guoJia[0]);

评分

参与人数 1黑马币 +7 收起 理由
AUASBUB + 7 很给力!

查看全部评分

回复 使用道具 举报
15223245 发表于 2016-1-15 11:07
数组越界,原因是  数组长度计算错误

那我应该怎么改正啊?
我已经求出来 数组长度为8了。。。
为什么if那里就出错呢
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[]) {
  4.     char *guoJia[]={"Ameirica","japan","korea","china","africa","freanch"};
  5.       char  lenth =sizeof(guoJia)/sizeof(guoJia[0]); //这里 lenth 输入的是8  但是下边就运算不了。
  6.     //如果改成 char lenth =strlen(guojia); lenth =2; 下边输出的就是 ameirica 和 japan 不符合运算了
  7.     printf("%d\n",lenth);


  8.     for (int i=0; i<lenth-1; i++)
  9.     {
  10.         for (int j=0; j<lenth-i-1; j++)
  11.         {

  12.             if ((strcmp(guoJia[j], guoJia[j+1]))>0)
  13.             {
  14.                 char *ch;

  15.                 ch =guoJia[j];
  16.                 guoJia[j]=guoJia[j+1];
  17.                 guoJia[j+1]=ch;

  18.             }



  19.         }

  20.     }
  21.     for (int j=0; j<lenth; j++)
  22.     {
  23.         printf("%s\n",guoJia[j]);
  24.     }


  25. }


复制代码


你的错误原因      数组长度计算错误

评分

参与人数 1黑马币 +5 收起 理由
xiaoku___ + 5 很给力!

查看全部评分

回复 使用道具 举报

数组越界,原因是  数组长度计算错误
回复 使用道具 举报
本帖最后由 15223245 于 2016-1-15 11:09 编辑
  1. <blockquote>错误原因 :数组越界,数组长度计算错误。 解决办法
复制代码
回复 使用道具 举报
我都蒙圈了。。我找到了一个以前上课做的。
  1. #include <stdio.h>
  2. #include<string.h>
  3. int main(int argc, const char * argv[]) {
  4.     char  *name[]={"CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
  5.     char   lenth =strlen(*name);
  6.     for (int i=0; i<lenth-1; i++)

  7.     {
  8.         for (int j=0; j<lenth-i-1; j++)
  9.         {
  10.             if ((strcmp(name[j], name[j+1]))>0)
  11.                
  12.             {
  13.                 char *temp;
  14.                 temp= name[j];
  15.                 name[j]=name[j+1];
  16.                 name[j+1]=temp;            }
  17.         }
  18.     }
  19.    
  20.     for (int j=0; j<lenth; j++)
  21.     {
  22.         printf("*name[%d]=%s\n",j,name[j]);
  23.     }
  24.    
  25.    
  26.     return 0;
  27. }
复制代码

对比半天也不知道到底错在哪里啊。。。
回复 使用道具 举报
我研究出来一个
因为我长度是地址 所以lenth 应该是用strlen;
  但是后边还是不对啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马