所以我有一个char数组c,它的字符如下:“ HELLO MY NAME”
我想创建一个char指针数组* pCar,以便pCar [0]将具有HELLO,而pCar [1]将具有MY,而pCar [2]将具有NAME。
我有这样的东西,但不起作用。
for (i = 0; i < 30; i++)
{
pCar[i] = &c[i];
}
for (i = 0; i < 30; i++)
{
printf("Value of pCar[%d] = %s\n", i, pCar[i]);
}
最佳答案
如@JoeFarrell所建议,您可以使用strtok()
进行操作:
char c[] = "HELLO MY NAME";
char *pCar[30]; // this is an array of char pointers
int n = 0; // this will count number of elements in pCar
char *tok = strtok(c, " "); // this will return first token with delimiter " "
while (tok != NULL && n < 30)
{
pCar[n++] = tok;
tok = strtok(NULL, " "); // this will return next token with delimiter " "
}
for (i = 0; i < n; i++)
{
printf("Value of pCar[%d] = %s\n", i, pCar[i]);
}
http://ideone.com/HxfXpW
strtok()
的作用是用一个空字符('\0'
)替换原始字符串中的定界符,该字符用于标记字符串的结尾。因此,最终您将获得:c ─── ▶ "HELLO\0MY\0NAME";
▲ ▲ ▲
│ │ │
pCar[0] ─┘ │ │
pCar[1] ────────┘ │
pCar[2] ────────────┘