我已经尝试了这个代码,但没有输出,也没有错误?
#include <stdio.h>
void reverse(char *p,char *v,int size){
for(int i=size-1,j=0;i<0;i--){
*(v+j) = *(p+i);
j++;
}
}
int main(){
char word[6] = {"hello"};
char re_word[6];
re_word[5]='\0';
reverse(word,re_word,6);
printf("%s",re_word);
}
2条答案
按热度按时间enxuqcxy1#
使用指针,它可以看起来像这样:
这是清楚和对称的,一旦它工作,而您的
i--
和j++
相距甚远。slen
是指字母的数量w/o终止。这里调用:也许应该使用
strlen()
,但这些行显示了您如何能够并且必须不仅控制总大小,而且特别是char数组的最后一个字节。如果没有正确的长度,
reverse()
必须先执行strlen()
,因为它必须知道第一个字母的距离。这个
*(v+j) = *(p+i)
或多或少是v[j] = p[i]
,并没有真正利用指针,相反。所以
revw
可能不是函数内部的最佳名称;revw_first_backwards
的意思是...或fill_start
。但是在我向后填充之前,我在右边做了一次额外的写入以终止字符串:使用指针的数组表示法:revw[1] = '\0'
.lf3rwulv2#
首先,
i < 0
将始终为false,给定i = size - 1
>
0
。你想要的是
i >= 0
。另外,给定
size = 6
,size - 1
将等于5,这是NULL终止符位置,因为C中的数组索引从0开始。也许可以使用C函数(如strlen()
)来计算长度,而不是硬编码。