首先,我不说你代码中的问题,仅从你的问题来看:
“ 没有报错只有警告,然后什么也没有输出只是一片空白”
你定义了一个数组a,又定义了一个字符指针b,同时没有给b指针初始化(一般会自动赋为空指针),那么,显然,b永不可能等于"\0".
第二个for循环没有意义。
这里我再帮你捋一下逻辑:第一个循环中,你把字符串中的每一个字符的地址赋给了从某一个位置(b指针的初始地址)开始的一小片没有空间的地址。
第二个循环中,从另一个地址(b的末地址)开始判断,如果b指向的某个东西不等于"\0",则打印b指向的东西的同时b++。
然而注意!尽管你以为将b的位置向后挪动了几个字符(这几个字符中还不包括\0,不知道你咋想的),b依然是空指针,就是说哪怕是输出b的地址,它都可能是类似乱码一样的东西。
既没有空间,又没有指向,还有一个未知的地址,简直不要再混乱。
其次,再说那个警告的问题。
我猜你现在已经知道错哪了。
指针就是指针,数组就是数组,想要存储字符串,就应该定义一个固定空间的数组,或者malloc出一块空间。
指针只能指向该数组的首地址,但不能作为空间被定义,这里编译通过是因为编译器在猜,它猜你定义了某一片空间大小的数组,正好能够存储该字符串,而a则是数组名,因此它给予了警告而不是error。
这里也是建议你重新学习一下指针和数组。
我原样输入你的代码,没有任何报错。方便提供你的编译日志吗?
顺便一提,你的代码有个非常致命的问题:第16行,指针b,是一个野指针,我这里的运行结果如同预期一样,出现了乱码,原因就是野指针是不可以用的。看来你是看到某些老教材用指针存储字符串产生了误解,但这样做非常不好,指针和数组终究是两个完全不同的东西,不可互相代替。要么把b改成数组,要么用malloc给b分配空间,拿来直接用是不可以的。
-------------------------------
第一个for循环执行过后b已经指向了字符串的末尾,第二个for循环完全不会执行,你可以在copy函数第一行新声明一个指针指向b的首地址,然后第二个for循环用新声明的指针对字符串进行读取输出