char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
このコードは有効ですか? memset がメモリのランダムな場所を埋めていると思いますよね?
char *tokens[100];
memset(tokens,'\0',sizeof(tokens));
tokens[n]=strtok(tempVar,",");
このコードは有効ですか? memset がメモリのランダムな場所を埋めていると思いますよね?
これは有効ですが、一連のポインターをすべてビット 0 に設定した結果が明確に定義されていないため、あまり役に立ちません。NULL
ポインタが(メモリ内で)「すべてのビットがゼロ」に見えるという保証はないため、これは悪い習慣です。
いいえ、これは「ランダムな」メモリを埋めるのではなく、tokens
配列が占有するメモリを正確に埋めます。
これらのポインターが指すメモリではなく、100個のポインターの配列であるトークンをクリアします。
memset ビットを次のように書き直します。
memset(tokens, 0, sizeof(tokens));
あなたがしていることは、実際には配列内のすべてのポインターにゼロを割り当てているからです。それ以外の場合、コードは有効ですが、期待どおりに動作するかどうかはわかりません。
n
これは有効なコードです (例で定義されていないことを除いて)。
memset
このように初期化しています。tokens
変数全体をゼロにしています。ランダムな場所ではありません。あなたの例でも必須ではありません。
また、はトークンのコピーを返すのではなく、strtok
その要素tempVar
へのポインターを変更して返すことに注意してください。tempVar
範囲外になると、要素が指すメモリ位置がダングリング ポインターになり、それらtokens
を逆参照すると未定義の動作が発生します。