1

私は配列を宣言しました:

char * words[1000] = {NULL};

そして今、その配列に単語を追加する一連のフォークされた子プロセスがありますが、それらは親プログラムに影響を与えていません。どうすればそれを変更できますか?

4

5 に答える 5

0

while ブロック内に if ブロックを追加していません!!!

   while(i < 1000 && words[i] != NULL)
   {
   i++;
 if(i<1000){
    words[i] = (char*) malloc(strlen(temp)+1);
    strcpy(words[i], temp);
   words[i][strlen(words[i])] = '\0';
    printf("Added: %s at location %d\n", words[i], i);
   }
  }
于 2012-12-06T02:56:13.923 に答える
0

これを試してみてください中括弧が間違っています:

int i = 0;
while(i < 1000 && words[i] != NULL){
    i++;
    if(i<1000){
        words[i] = (char*) malloc(strlen(temp)+1);
        strcpy(words[i], temp);
        words[i][strlen(words[i])] = '\0';
        printf("Added: %s at location %d\n", words[i], i);
    }
}
于 2012-12-06T02:58:29.307 に答える
0

フォークを使用して子を作成すると、子が配列内の何かを変更すると、各子は配列の独自のコピーを取得し、実際には独自のコピーを変更します。あなたがしようとしていることには、プロセス間通信(IPC)が必要です。作成する必要がありますメモリを共有するか、パイプを作成して、すべての子と親の配列値が変更されるようにします

于 2020-05-21T08:50:05.787 に答える
0

コード全体を貼り付けてください...あなたがしていると思うことを行うコードを書きましたが、うまくいきました...

    #include <stdio.h>

int main(int argc, char *argv[])
{
  char* words[1000];
  int j;
  for(j = 0; j<1000; j++)
    words[j] = NULL;
  char *temp = "dummy";

  for (j = 0; j < 10; j++)
    {
      int i = 0;
      while(i < 1000 && words[i] != NULL)
        i++;
      printf("Adding something to %d vs %d\n",i,j);
      if(i<1000){
        words[i] = (char*) malloc(strlen(temp)+1);
        strcpy(words[i], temp);
        words[i][strlen(words[i])] = '\0';
        printf("Added: %s at location %d\n", words[i], i);
      }
    }
}

/* prints:
Adding something to 0 vs 0
Added: dummy at location 0
Adding something to 1 vs 1
Added: dummy at location 1
Adding something to 2 vs 2
Added: dummy at location 2
Adding something to 3 vs 3
Added: dummy at location 3
Adding something to 4 vs 4
Added: dummy at location 4
Adding something to 5 vs 5
Added: dummy at location 5
Adding something to 6 vs 6
Added: dummy at location 6
Adding something to 7 vs 7
Added: dummy at location 7
Adding something to 8 vs 8
Added: dummy at location 8
Adding something to 9 vs 9
Added: dummy at location 9
*/
于 2012-12-06T03:04:27.103 に答える
0

うーん、あなたの編集ケースでは:フォークを使用しないで、スレッドを使用してください。すべてが1つのアドレス空間で実行されるためです...
そしてもちろん、ミューテックスを使用して単語配列を保護します...

于 2012-12-06T03:17:07.957 に答える