gpt4 book ai didi

C内存释放?

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:35 25 4
gpt4 key购买 nike

我创建了一个程序来从字符串中删除多余的空格。

void removeDuplicateSpaces(char **c){  //a-b---c
char *a=*c;
char *b=malloc(sizeof(char)*strlen(*c)); <-- allocation
int i=0,nf=0,space=0;
for(;a[i]!='\0';i++){
if(a[i] != ' '){ //a-b-
if(space>1){
b[nf]=a[i];
nf++;
space=0;
}else{
b[nf]=a[i];
nf++;
}
}else{
space++;
if(space==1 && i!=0){
b[nf]=' ';
nf++;
}
}
}
b[i]='\0';
*c=b;
}

int main(void) {
char *a=" Arista is hiring from ISM Dhanbad";
removeDuplicateSpaces(&a); //function prototype can't be changed.
printf("%s",a); // ? where to deallocate.
return 0;
}

Working demo

它工作正常。但问题是我应该在哪里释放内存,在 removeDuplicateSpaces() 函数中分配。如果我在 main 中的 printf 之后添加 free 语句,那么它会使我的程序崩溃(signal 6 abort)。那么正确的方法是什么?


原始问题

#include<stdio.h>
main()
{
char *foo = " Arista is hiring from ISM Dhanbad";
void removeDuplicateSpaces(foo);
printf("%s\n", foo);
}

以上代码已给出。编写函数 removeDuplicateSpaces 以删除给定字符串中的多余空格。

例如:(为清楚起见,“-”表示空格)

Input String : (without quotes)
“—-Arista——is—-hiring—-from-ISM–Dhanbad”
Output String :
“Arista-is-hiring-from-ISM-Dhanbad”

最佳答案

另一种方法

char* removeDuplicateSpaces( char const * src )  // show that input string is read-only
{
char* strnospaces = calloc( 1, strlen(src)+1 );// string is filled with \0's
for (char *t = strnospaces, *s = src; *s; ) // copy until \0
if (!isspace(*s)) *t++=*s++; else s++; // copy only if not space
return strnospaces;
}

关于C内存释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19482156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com