我和我的伙伴正在研究这个涉及功能指针的问题。目标是编写一个函数,将一些字符串处理函数应用于字符串。然后,该函数返回一个字符串数组,其中包含输入字符串上每个处理函数的结果。任何帮助,将不胜感激。谢谢!
char** string_central(char*(**)(char*), char* str);
char* char_double(char* str);
char* char_shift(char* str);
char* char_flip(char* str);
void main(int argc, char* argv[]) {
char* (*functions[])(char *) = {char_double, char_shift, char_flip, NULL};
char** result = string_central(functions, *argv);
char* result_ptr = *result;
while( result_ptr ){
printf("Result: %s", result_ptr);
result_ptr++;
}
}
char** string_central(char*(*functions[])(char*), char* str){
char** returnArray = (char **) malloc(100*sizeof(char));
char** firstposition = returnArray;
while(*functions != NULL) {
*(returnArray)++ = (*(functions))(str);
}
*(returnArray)++ = "\0";
return firstposition;
}
//Other Functions work properly
答案 0 :(得分:0)
你需要在string_central中使用malloc,如this => (100 * sizeof(char *))。字符的大小通常为1个字节,任何指针的大小通常为4个字节。 (这个)
哦,记得在使用后的某个时候释放内存。
答案 1 :(得分:0)
最明显的是,你的string_central
函数在无限循环中重复调用传递函数数组中的第一个函数,运行returnArray
分配结束并破坏内存。您需要在循环中递增functions
指针。
你在char
中为100 returnArray
分配空间,而不是100个指针,你永远不会检查溢出(这个数组或任何分配的字符串),所以如果你的输入字符串太长,你就会溢出。
用空字符串标记returnArray
的结尾(而不是NULL指针,这可能更有意义)。
您的char_XXX
函数没有NUL终止它们创建的字符串。
回到main,当你尝试打印结果时,你只打印returnArray
中的第一个字符串,然后沿着该字符串递增指针,打印相同字符串的部分,删除一个字符串时间。
最后,你永远不会释放你分配的任何内存。