我在C中编写了一个从字符串
中删除字符的方法char* removeChars(char input[], char remove[])
{
int src, dst = 0;
int size = strlen(input);
bool flags[128];
char output[18]; // <- This should be output[size]!
int i;
for(i=0; i<128; i++) {
flags[i] = false;
}
int j=0;
while(remove[j] != '\0') {
flags[remove[j]] = true;
j++;
}
for(src=0; src<size; src++) {
if(flags[input[src]] != true) {
output[dst++] = input[src];
}
}
return output;
}
我遇到的一个问题是,当我尝试使用size(即char output [size])设置输出数组的大小时,输出数组似乎总是具有零元素。它只在我指定特定大小(如18)时才起作用。我应该使用strcpy还是malloc?如果是这样,应该怎么做?
答案 0 :(得分:2)
char *output = malloc(sizeof(char) * (size+1));
如果您希望使用size
动态分配内存。
一旦你完成使用这个内存,请释放它。
free(output);
答案 1 :(得分:1)
您的程序具有未定义的行为,因为您返回指向本地数组的第一个元素的指针,通常情况下该函数将在退出函数后被销毁。
所以你必须动态地在堆中分配数组。
另一个问题是你没有用终止零附加输出字符串。
如果要删除源字符串中的字符&#34;就位#34;函数woild看起来更简单。在这种情况下,不需要额外的数组。
此外,您可以使用标头strchr
中声明的标准函数<string.h>
来确定源字符串中的给定字符是否存在于包含要删除的字符的字符串中。