Tenacious0 2019-03-29 21:05 采纳率: 100%
浏览 370
已采纳

把数组y里的字符串接到x里字符串的后面。为什么打印*a是乱码?

#include "stdafx.h"

char** strnlen ( char* a , char* s )
{
char** d = &a;
while( a != 0)
{
*a++;
}
while( *s != 0 )
{
*a = *s;
*a++;
*s++;
printf("%c",*a);
}
return d;
}
int main(int argc, char
argv[])
{

char name[] = "china";
char name1[] = "chinese";
strnlen(name,name1);


return 0;

}

运行后

烫€

  • 写回答

2条回答

  • 杨七七 2019-03-29 22:46
    关注

    从main开始看 定义一个名为name和name1的数组,里面放着的是china和chinese,没问题
    下一行是一个实现连接的函数,看着也没问题,但理论上你想name你只给他分配一个china的空间,只有那么大,后面连的是chinese给它放哪儿了?连好了也是占有的不合法的不是可以使用空间,写的时候要注意
    跳至char** strnlen ( char* a , char* s )这个函数,a指向name,s,指向name 返回一个指向指针的指针

    char** d = &a;这个指针d是指向指针a的,也就相当于a 改变了d也改变了(这里为什么我就不说了哈)
    while( a != 0)这一句,a里面放的是地址,你看你的下面的s带了*号,不多解释
    {
    a++;这一句,++和是同一级别的,规则是从右至左看,所以这句话也就是*(a++)a先后自增,然后对a取值一下,你觉的最后的取值有意义吗?
    }

    while( *s != 0 )//我的s所指的字符不是结束符(对的)
    {
    *a = *s;那我就把s所指的字符赋值给a所指的空间(对的)
    *a++;a指向下一个地址(同上面第一个while里的*a++不多解释)
    *s++;s指向下一个地址(同上面第一个while里的*a++不多解释)
    printf("%c",*a);输出所指向的字符???你的a已经在上两行++了你输出的是a还没有进行赋值的空间的值
    }
    return d;d你指向了a,上面说了,a一变,d也就变了,你的d就是最后a指向的空间

    这个是我改以后的代码

    void strnlen ( char* a , char* s )
    {
    char* d = a;//d指向a所指向的也就是d指向name就行,a变了,d不变,才能找到一个字符串的首地址呀
    while( *a != 0)
    {
    a++;
    }

    while( *s != 0 )
    {
    *a = *s;
    a++;
    s++;
    }
    *a='\0';//一定要记得这个,一个字符串要有终束符
    printf("%s",d);

    }
    int main(int argc, char argv[])
    {

    char name[] = "china";
    char name1[] = "chinese";
    strnlen(name,name1);

    return 0;

    }

    可以看出对指针有一定的概念,但对指针具体指的是什么还不太清楚,可以先弄懂指针指向的是什么,然后多做题巩固下,有些没说太清,自己可以摸索下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘