#include<stdio.h>
#include<conio.h> //**Just To Add getch() function**
int length(char *p){
int i; //**I know That these variable are not the same as they are in other function**
for(i=0;*(p+i)!='\0';i++);
return i;
}
void strrev(char *p){
int i,len;
len=length(p);
char cpy[len]; //**Already Tried to change it to some fixed value**
for(i=0;i<len;i++){
cpy[i]=*(p+len-i);
}
for(i=0;i<len;i++){
*(p+i)=cpy[i];
}
}
int main(){
char str[20]="computer";
strrev(str);
printf("%s",str);
getch(); //**to Stop The Screen**
return 0;
}
我曾尝试将数组大小更改为固定值,我也尝试过更改变量,但语法没有错误。
根据@Yunnosch的推荐,这是我的评论作为答复。
在函数strrev
中,您遍历了整个字符串,即i
的迭代从零到len / 2
,您正确地抓住了字符,但是其余的迭代只是再次撤消了此操作。
因此,只需从零迭代到len >> 1
。移位确保整数除法。
void strrev(char* const str)
{
const std::size_t len = strlen(str);
for(std::size_t i = 0; i < (len >> 1u); ++i)
{
const std::size_t j = len - 1u - i;
char c = str[i];
str[i] = str[j];
str[j] = c;
}
}