在C中反转字符串 #包括 #包括 #包括 char*str_rev(char s[]{ 静态字符*st=NULL; 静态字符*l; int i=0,c=0; st=malloc((strlen)*sizeof(*s))+1; *l=st; 如果(s==NULL){ 返回“无效参数”; } 对于(i=0;s[i]!='\0';i++){ ; } 对于(c=i;c>=0;c--){ *l++=s[c]; } l='\0'; 返回st; } int main(){ 字符a[]=“Angus Declan R”; printf(“\n%s\n”,str_rev(a)); 返回0; }
如何释放使用func str_rev()中的malloc()分配的内存,因为我需要重新运行反向字符串。(1):由于以下原因,在C中反转字符串 #包括 #包括 #包括 char*str_rev(char s[]{ 静态字符*st=NULL; 静态字符*l; int i=0,c=0; st=malloc((strlen)*sizeof(*s))+1; *l=st; 如果(s==NULL){ 返回“无效参数”; } 对于(i=0;s[i]!='\0';i++){ ; } 对于(c=i;c>=0;c--){ *l++=s[c]; } l='\0'; 返回st; } int main(){ 字符a[]=“Angus Declan R”; printf(“\n%s\n”,str_rev(a)); 返回0; },c,C,如何释放使用func str_rev()中的malloc()分配的内存,因为我需要重新运行反向字符串。(1):由于以下原因,l中的第一个内存是\0,这就是不打印任何内容的原因: 在你的循环之后 #include<stdio.h> #include<string.h> #include<malloc.h> char *str_rev(char s[]){ static char *st = NULL; static char *l; int i = 0,c
l
中的第一个内存是\0
,这就是不打印任何内容的原因:
在你的循环之后
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *str_rev(char s[]){
static char *st = NULL;
static char *l;
int i = 0,c = 0;
st = malloc((strlen(s) * sizeof(*s))+1);
*l = st;
if(s == NULL){
return "INVALID PARAMS";
}
for(i=0;s[i]!='\0';i++){
;
}
for(c=i;c >=0;c--){
*l++ = s[c];
}
l = '\0';
return st;
}
int main(){
char a[]="Angus Declan R";
printf("\n %s \n",str_rev(a));
return 0;
}
s[i]
变为\0
,您分配c=i
,然后在第二个循环中,您在l
的第一个点分配\0
for(i=0;s[i]!='\0';i++){
;
}
返回返回l在l
\0
中的第一个位置
因此,在带有%s
for(c=i;c >=0;c--){
*l++ = s[c]; // you are assigning `\0` for first time
}
不打印任何内容
建议:
printf("\n %s \n",str_rev(a));
(2):问题代码中至少有两个编译错误。你忘了代码>在两个位置上
for(c=i-1;c >=0;c--){
// ^ c should be i-1 initially
*l++ = s[c];
}
下一个
第三个严重错误
printf("\n %s \n",str_rev(a));
您返回的内存地址无效
您要做的是,在st
中分配内存,然后分配给l
,然后free(st)
并返回l
:(阅读注释)
建议:您是否使用l
并返回st
而不调用free()
(4):
这不是错误,但为什么会出现这种无用的循环
st = malloc((strlen(s) * sizeof(*s))+1); // allocation
l = st; // assign to l
// code in between
free(st); // st and l become invalid after free
return l; // returning invalid memory
(5):在l
while(c > 0){
l--;
c--;
}
(1):由于以下原因,l
中的第一个内存是\0
,这就是不打印的原因:
在你的循环之后
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *str_rev(char s[]){
static char *st = NULL;
static char *l;
int i = 0,c = 0;
st = malloc((strlen(s) * sizeof(*s))+1);
*l = st;
if(s == NULL){
return "INVALID PARAMS";
}
for(i=0;s[i]!='\0';i++){
;
}
for(c=i;c >=0;c--){
*l++ = s[c];
}
l = '\0';
return st;
}
int main(){
char a[]="Angus Declan R";
printf("\n %s \n",str_rev(a));
return 0;
}
s[i]
变为\0
,您分配c=i
,然后在第二个循环中,您在l
的第一个点分配\0
for(i=0;s[i]!='\0';i++){
;
}
返回返回l在l
\0
中的第一个位置
因此,在带有%s
for(c=i;c >=0;c--){
*l++ = s[c]; // you are assigning `\0` for first time
}
不打印任何内容
建议:
printf("\n %s \n",str_rev(a));
(2):问题代码中至少有两个编译错误。你忘了代码>在两个位置上
for(c=i-1;c >=0;c--){
// ^ c should be i-1 initially
*l++ = s[c];
}
下一个
第三个严重错误
printf("\n %s \n",str_rev(a));
您返回的内存地址无效
您要做的是,在st
中分配内存,然后分配给l
,然后free(st)
并返回l
:(阅读注释)
建议:您是否使用l
并返回st
而不调用free()
(4):
这不是错误,但为什么会出现这种无用的循环
st = malloc((strlen(s) * sizeof(*s))+1); // allocation
l = st; // assign to l
// code in between
free(st); // st and l become invalid after free
return l; // returning invalid memory
(5):在l
while(c > 0){
l--;
c--;
}
这是你真正的密码吗?它无法编译。请用一个问题陈述和几句话来解释您的解决方法,以改进您的问题。@nm:是的,这是我真正的代码。它正在编译,但字符串没有按相反的顺序打印。您使用的编译器是什么?代码不是有效的C,两处缺少分号。这是您的真实代码吗?它无法编译。请用一个问题陈述和几句话来解释您的解决方法,以改进您的问题。@nm:是的,这是我真正的代码。它正在编译,但字符串没有按相反的顺序打印。您使用的编译器是什么?代码不是有效的C,它在两个地方缺少分号。@Angus它不正确。在发布问题之前,你应该尽全力。。如果您有任何疑问,请告诉我。@Angus没问题,准备好,再试一次。我已经给出了足够的分数,我认为您可以更正您的代码。谢谢。您给了改进编码的希望,而不是指责编码不好。我将在下一篇文章中改进我的编码。@Angus是的,这没什么大不了的。我刚刚通过了我大学的C-grad考试。你只需要读一本书,解决每一章后面给出的每一个练习。才7天task@Angus再次阅读我的答案,我对所有评论做了一些更改。你只犯了容易改进的错误。从算法上讲,确实没有问题。@Angus,这是不正确的。在发布问题之前,你应该尽全力。。如果您有任何疑问,请告诉我。@Angus没问题,准备好,再试一次。我已经给出了足够的分数,我认为您可以更正您的代码。谢谢。您给了改进编码的希望,而不是指责编码不好。我将在下一篇文章中改进我的编码。@Angus是的,这没什么大不了的。我刚刚通过了我大学的C-grad考试。你只需要读一本书,解决每一章后面给出的每一个练习。才7天task@Angus再次阅读我的答案,我对所有评论做了一些更改。你只犯了容易改进的错误。在算法方面确实没有问题。