文字列をポインタの配列に変換するコードを記述しようとしていますが、各ポインタはその文字列内の単語を指しています。下のコードをコンパイルして、最初のループ内のすべての単語を別々に印刷すると、すべての単語が問題なく終了しますが、ループが終了した後、ループ内の各単語をループで印刷しようとすると、文字列の最後の単語です。文字列へのポインタの配列への変換
私たちは、この関数に「ABは、CD EF」を渡された場合は、最後のループが
ef then ef then ef
が印刷されますが、私は最初のループで配列の各要素を印刷する場合、それが印刷されます
ab then cd then ef
コード
void sort(char* str)
{
char* a[100]={NULL};
char *tStr2,*min,*temp;
tStr2=(char*)malloc(strlen(str));
int i=0,i2=0,j=0;
while(i<=strlen(str))
{
if(str[i]!=' ' && i!=strlen(str))
{
tStr2[i2]=str[i]; //copy every word separately to tStr2[]
i2++;
}
else
{
tStr2[i2]=NULL;
a[j]=tStr2; //word is complete --> copy it to the array
printf("%s \n",a[j]); //print every word
j++;
i2=0; //initializes the word counter
}
i++;
}
i=0;
for (i=0;a[i];i++) //loop is complete , print all array elements
printf("%s \n",*a[i]);
}
'std :: string'と' std :: vector'と 'std :: stringstream'はあなたの友人です。 – NathanOliver
これはCまたはC++ですか? –
1)CはC++ではありません。CはCではありません。2)そのうちの1つを選択します。3)コードをフォーマットします。それは判読不能です。 – Olaf