1

私はこの問題で頭を壁にぶつけています。

要約すると、文字列を配列に動的に追加し、並べ替えてから、別の文字列値と照合する必要があります。

これは、C をスクリプト言語としてサポートする SCADA システムで動作する必要がありますが、機能は制限されています。qsort() が利用可能です。

ただし、私が持っているテスト コードでは、動的に値が追加された配列で qsort を使用できません。

明確にするために、配列に文字列を追加できますが、これは正常に機能します。ただし、その配列で qsort() を呼び出すと、インデックスを出力できなくなります。

これまでのコードは次のとおりです(親切に、私はCにあまり精通していません):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cstring_cmp (const void *a, const void *b)
{
  // This function is taken from an online example
  const char **ia = (const char **) a;
  const char **ib = (const char **) b;
  return strcmp (*ia, *ib);
}


int main ()
{
  //char *ArchiveKomponents[] = {"R1890L", "F1121D", "F1284Z", "A1238K"};
  // If I do the above commented out, it works as intended
  char ArchiveKomponents[100][20];

  strcpy(ArchiveKomponents[0], "R1890L");
  strcpy(ArchiveKomponents[1], "F1284Z");

  size_t strLen = sizeof (ArchiveKomponents) / sizeof (char *);
  printf ("Len: %zu\n", strLen);

  printf ("Before [0]: %s\n", ArchiveKomponents[0]);
  printf ("Before [1]: %s\n", ArchiveKomponents[1]);

  qsort (ArchiveKomponents, (size_t)strLen, sizeof (char *), cstring_cmp);

  printf ("After [0]: %s\n", ArchiveKomponents[0]);
  printf ("After [1]: %s\n", ArchiveKomponents[1]);
  
  // When run, the "After" prints are not even printed, the program simply halts
  
  return 0;
}

これを行う方法についての答えを探して、インターネット全体をグーグルで検索したように感じますが、運がありません。

よろしく

4

1 に答える 1