うまくいけば、あなたのコードが何をしようとしているのか理解できます。次のように書き直しました。
#include <stdio.h>
void main()
{
// allocate 40 uninitialized pointers to char strings
char *text_ptr[10][4]; //10 rows, 4 columns
int i;
for (i = 0; i < 10; i++)
{
// essentially, copy ptr to string literal into an array element
text_ptr[i][0] = "a";
text_ptr[i][1] = "xyz";
text_ptr[i][2] = "b";
text_ptr[i][3] = "xyz";
// print two elements from each row for a quick check
printf("\n%s, %s", text_ptr[i][0], text_ptr[i][1]); fflush(stdout);
}
} // end of main;
// Note. This code WAS tested in an Eclipse/Microsoft C compiler environment.
strcpy()
コピーできるように、文字列が割り当てられる領域に依存します。上記のコードには、char ポインタの配列があり、それぞれが割り当てられているリテラルのアドレスに設定されています。
このコードでは、割り当てられた文字列を更新できません。malloc()
文字列を変更する場合は、40 ([10][4]) 個のポインターのそれぞれに対してa を実行する必要があり、それぞれmalloc()
が文字列の長さ (または最大長) を割り当てる必要があります。 . そのポインター要素に関連付けられています。