2017-06-13 18 views
-1

マップキーとして使用される単語を含む大きな文字配列を持っています。例えば、 "key11 key12 .." 配列からkey12を直接消費すると、key12のアドレスがワードサイズで割り切れないため、整列していないメモリが使用されていると考えられますか?メモリ配置とC配列

私たちがc文字列を使用するときにメモリの配置がどのように動作するかわかりません。開始アドレスは完全に揃えることができますが、c文字列の最初のインデックスをスキップすると(私の意見では)それは誤った位置になります。そうであれば、c文字列比較関数は多くの整列していないアドレスで動作する必要があります。どういうわけか私はここに何かを見逃していると感じます。 。

+0

一般的にメモリ配置は、あなたがヒープ上に悪やハックをやっている場合を除き考える必要があるものではありません。 char *をmallocすると、その文字をchar *にキャストするかchar *に格納することで、charまたは1バイトの添え字に揃えられます。 – cat

答えて

1

あなたが何かを持っている場合は、今トークンは「key11」へとあなたが

を呼び出した場合のポインタであるそれらのそれぞれを取得するための最良の方法は

char *token = strtok(keys, " \n"); 

を使用することです

char *keys = "key11 key12 key13" 

を言うことができます

token = strtok(NULL, " \n"); 

次のキーへのポインタが表示されます。

あなたが(はstrtokについてhere詳細を読むことができます)

+0

Ervin、strtokの使い方を聞いていません。しかし、ここでstrtokを使用するかどうかを尋ねる方法では、char配列の位置がずれてしまいます。 – user6907475