0

そのため、文字列をそのようなキーとして宣言しました[25] [50]; 値[25][50];

以前の文字列を空白で分割し、値をそれぞれキー/値配列に格納しています。問題は、文字列を配列内の位置に割り当て、その値を printf(); で出力したいときに発生すると思います。常にヌルです。文字列または印刷の割り当てに何か問題がありますか?

strcpy(buff, buf);
bufcopy = strtok(buff, " ");
if (strcmp(job, "PUT") == 0) {
    //keys[i] = bufcopy;
    strcpy(keys[i], bufcopy);
    printf("server received: %s", keys[i]);
    i++;
}
4

1 に答える 1

0

私が間違っている場合は修正してください。ただし、次のような入力を読み込もうとしているようです。

PUT key value

コマンドラインからこれらのキーと値のペアを配列に保存します

char keys[25][50];
char values[25][50];

それがあなたが達成しようとしているものなら:

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

int main(){
  int i = 0;
  char keys[25][50];
  char values[25][50];
  char buf[256], *bufcopy;
  do{
    fgets(buf, 255, stdin);
    bufcopy = strtok(buf, " ");
    if (strcmp(bufcopy, "PUT") == 0) {
      bufcopy = strtok(NULL, " ");
      strcpy(keys[i], bufcopy);
      bufcopy = strtok(NULL, " ");
      strcpy(values[i], bufcopy);
      printf("server received pair %d - Key: %s\tValue: %s\n", i, keys[i], values[i]);
      i++;
    }
  }while(i<25);
  return 0;
}

これにより、キー/値配列の最後に到達するまで入力が読み込まれ、配列に保存されます。strtok() を連続して呼び出して、すべてのスペースで分割し、次の単語へのポインターを取得する必要があります (次の空白まで)。仕組みの詳細については、strtok()のリファレンスをご覧ください。

于 2013-11-05T09:35:32.557 に答える