1
#include <stdio.h>
#include <string.h>
void F1(void *comp, void *record){
   int complen = strlen((char *)comp), recordlen = *(int *)record;
   *(int *)record = complen>recordlen ? complen : recordlen;
}

void F2(void *comp, void *ans){
   if(!*(char **)ans)
      *(char **)ans = (char *)comp;
   else if(strcmp((char *)comp, *(char **)ans) < 0)
      *(char **)ans = (char *)comp;
}


void ProcessStrings(char ***vals, void* (*fp)(char *, void *), void *champ){
   char **copy = *vals;
   while(*copy){
      fp(*copy++, champ);
   }
}

int main() {
   char *strings1[][100] = {{"beta", "alpha", "gamma", "delta", NULL}, {"Johnson", "Smith", "Smithson", "Zimmerman", "Jones", NULL}, {"Mary", "Bill", "Bob", "Zoe", "Annabelle", "Bobby", "Anna", NULL}};
   int maxLen = 0;
   char *minString = NULL;
   ProcessStrings(strings1, F1, &maxLen);
   ProcessStrings(strings1, F2, &minString);
   printf("Strings1: Max length is %d and min is %s\n", maxLen, minString);
}

簡単な背景... 関数 F1 は、文字列のリストの最大長をその 2 番目のパラメーターに提供します。F2 は、ASCII 値に関して最小の文字列を提供します。

私のエラー メッセージは、文字列を処理するために互換性のないポインター型を渡していることを示しています。ポインターを引くと、そうではないような気がします。ヘルプ?

4

1 に答える 1