鱼C论坛

 找回密码
 立即注册
查看: 1627|回复: 13

[已解决]请问一下关于char[] 和程序的问题

[复制链接]
发表于 2019-2-9 17:01:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 愈伤组织 于 2019-2-9 17:31 编辑

请问一下这个到底是怎么一回事?
难道数组索引号不是从0开始的?

#include <stdio.h>
int main()
{
    char ch [7]={'6','8','0','8','1','2','\0'};
    char ch1[6];
    do  {
            printf("请输入密码\n");
            scanf("%s",&ch1);
            getchar();

        }while(ch1!=ch);

    return 0;
}
#include <stdio.h>
int main()
{

    char ch [6]={"zhubin\0"};
    printf("%s\n",ch);
    char ch1 [6]={"zhubin\0"};
    if(ch==ch1)
        {
            printf("%s和%s 是一样的",ch,ch1);
        }
    else
        {
            printf("%s 和 %s 不是一样的",ch,ch1);
        }
        return 0;
}
最佳答案
2019-2-10 01:28:53
愈伤组织 发表于 2019-2-9 19:21
那为什么不是680812了?
那我第二个程序如果用的是char ch [6]={"zhubin\0"}为什么在显示屏幕打出来的 ...

'\0'是结束符,处理到它的时候代表字符串结束,第二个程序的数组开得太小,已经造成了越界,乱码是情理之中
比较字符串是不是一样需要调用string中的strcmp函数,如果想要自己写也是可以,这里给你个思路,依次比较字符串每一位是不是相同,处理到结束符'\0'结束判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-9 17:06:22 | 显示全部楼层
抱歉各位我上传不了关于调试的图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-9 17:16:21 | 显示全部楼层
本帖最后由 愈伤组织 于 2019-2-9 17:36 编辑

就是char ch [7]={'6','8','0','8','1','2','\0'}; 后 ch值是 680812
如果 char ch [5]={'6','8','0','8','1','2',’\0’}; ch值是68081
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-9 18:17:14 | 显示全部楼层
愈伤组织 发表于 2019-2-9 17:16
就是char ch [7]={'6','8','0','8','1','2','\0'}; 后 ch值是 680812
如果 char ch [5]={'6','8','0','8', ...

第二个数组开的不够大装不了那么多数据啊,就只能装下68081
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-9 19:21:35 | 显示全部楼层
本帖最后由 愈伤组织 于 2019-2-9 19:25 编辑
447908543 发表于 2019-2-9 18:17
第二个数组开的不够大装不了那么多数据啊,就只能装下68081


那为什么不是680812了?
那我第二个程序如果用的是char ch [6]={"zhubin\0"}为什么在显示屏幕打出来的是zhubin(?
还有你能告诉我字符串怎么比较是不是一样了?  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-9 19:48:15 | 显示全部楼层
首先我发现两个比较大的问题。第一个你这scanf("%s",&ch1)来输入字符串秀到我了。ch1本来就已经是地址了,你再取一手地址。应该是scanf("%s",chi)来输入。第二个在C语言中两个char[]是不能够直接来比较的。需要头文件#include<string.h>,然后调用strcmp(ch1,ch)通过返回值是否为零来判断是否相同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-10 01:28:53 | 显示全部楼层    本楼为最佳答案   
愈伤组织 发表于 2019-2-9 19:21
那为什么不是680812了?
那我第二个程序如果用的是char ch [6]={"zhubin\0"}为什么在显示屏幕打出来的 ...

'\0'是结束符,处理到它的时候代表字符串结束,第二个程序的数组开得太小,已经造成了越界,乱码是情理之中
比较字符串是不是一样需要调用string中的strcmp函数,如果想要自己写也是可以,这里给你个思路,依次比较字符串每一位是不是相同,处理到结束符'\0'结束判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-10 13:39:49 | 显示全部楼层
447908543 发表于 2019-2-10 01:28
'\0'是结束符,处理到它的时候代表字符串结束,第二个程序的数组开得太小,已经造成了越界,乱码是情理之中
...

那char ch 【6】 不是正好能存 7 个字符的吗? ‘z’,‘h’,‘u’,‘b’,‘i’,‘n’,‘\0’吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-10 15:01:11 | 显示全部楼层
愈伤组织 发表于 2019-2-10 13:39
那char ch 【6】 不是正好能存 7 个字符的吗? ‘z’,‘h’,‘u’,‘b’,‘i’,‘n’,‘\0’吗?

原来你是这个意思啊,不是这样的,ch[6]是申请了6个char类型的空间,实质上是0-5,你算算0-5是不是已经6个了,实际上是不存在ch[6]这个元素的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-10 16:23:30 | 显示全部楼层
本帖最后由 愈伤组织 于 2019-2-10 16:27 编辑
447908543 发表于 2019-2-10 15:01
原来你是这个意思啊,不是这样的,ch[6]是申请了6个char类型的空间,实质上是0-5,你算算0-5是不是已经6个了, ...


嗯,谢谢你,我明白了,但是我刚刚debug我的代码发现了一个问题
#include <stdio.h>
#include <string.h>
int main()
{
    char ch [6]={"680812"};
    char ch1[6];
    do  {
            printf("请输入密码\n");
            scanf("%s",ch1);
            printf("%s && %s\n",ch,ch1);

        }while(strcmp(ch,ch1));

        return 0;
}


也就是说,原来我的ch 中应该是"680812" 然而到了scanf(“%s”,ch1)以后 ch中的内容就变了一堆/00....
请问这是什么原因?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-10 16:54:48 | 显示全部楼层
愈伤组织 发表于 2019-2-10 16:23
嗯,谢谢你,我明白了,但是我刚刚debug我的代码发现了一个问题

我在我这里调试你的这个代码没有发现你说的这个问题也...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-10 17:20:55 | 显示全部楼层
447908543 发表于 2019-2-10 16:54
我在我这里调试你的这个代码没有发现你说的这个问题也...

嗯?真的吗,那这是电脑的问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-10 18:03:58 | 显示全部楼层
愈伤组织 发表于 2019-2-10 17:20
嗯?真的吗,那这是电脑的问题吗?

应该是调试过程中编译器的问题,你的程序能按照你的逻辑跑起来吗,如果可以那就没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-10 20:21:07 | 显示全部楼层
447908543 发表于 2019-2-10 18:03
应该是调试过程中编译器的问题,你的程序能按照你的逻辑跑起来吗,如果可以那就没问题

好吧,okay谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表