使用して
char *tokens[size1+size2]
と
tokens = (char*) malloc(size1+size2+1);
は正しくありません。. 最初のものを使用する場合は(size1+size2)
、文字列ポインターの静的割り当てを使用してポインターの配列を既に定義しています。そのため、malloc で動的に再割り当てすることはできません。
文字列ポインタの配列を malloc で動的に割り当てたい場合は、次のように定義する必要がありますtokens
。
char **tokens
ダブルポインター。これは、文字列へのポインタを含む配列へのポインタを意味します
割り当てのために、次のようにします:
tokens = (char**) malloc((size1+size2+1)*sizeof(char *));
為に:
strcpy(tokens, tokens1);
ポインターの配列を別のポインター配列にコピーしたい。しかし、関数を使用してcharの配列をcharの配列にコピーしました。また、char 型とポインター型は同じではありません。char のサイズは 1 バイトで、ポインターのサイズは 4 バイト/8 バイトです (使用するシステムによって異なります)。
についても同じstrcat
配列全体をコピーするのではなく、アドレスが見つかるまで配列memcpy
をコピーする必要があるため、これは役に立ちませんでしたtokens1
NULL
文字列のポインタ(アドレス)のみをコピーしたい場合:ここでそれを行う方法の後に
//to copy tokens1 (terminated with NULL address)
for (i=0;tokens1[i]!=NULL;i++)
{
tokens[i]=tokens1[i];
}
//to concat tokens2 (terminated with NULL address)
for (j=0;tokens2[j]!=NULL;j++)
{
tokens[i+j]=tokens2[j];
}
tokens[i+j]=NULL;
tokens1
との文字列をコピーtokens2
したい場合は、関数tokens
を使用できstrdup()
ます: here after how you can do it
for (i=0;tokens1[i]!=NULL;i++)
{
tokens[i]=strdup(tokens1[i]);
}
for (j=0;tokens2[j]!=NULL;j++)
{
tokens[i+j]=strdup(tokens2[j]);
}
tokens[i+j]=NULL;