如何在分隔符处将char *拆分为3个char *?

时间:2014-05-01 13:25:59

标签: c string char

我想将char* time = "15:18:13";分为char* hour;char* minute;char* seconds;

问题是我不知道怎么做。我想尝试Pebble Watchface。我已经使用了char* hour = strok(time, ":");,但第一个参数必须是char[],但时间是char*

有谁知道怎么做?

2 个答案:

答案 0 :(得分:2)

根据alk的评论,可以使用的方法是sscanf,如下所示:

#include <string.h>

int main ()
{
  char* str = "15:18:13";
  int a, b, c;
  sscanf(str, "%d:%d:%d", &a, &b, &c);
  printf("%d %d %d\n", a, b, c);
  return 0;
}

但是,以下是更通用的解决方案。

使用strtok。 您可以将它们存储在一个数组中,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
  char str[] ="15:18:13";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str,":");
  char* a[3];
  int i = 0;
  while (pch != NULL)
  {
    a[i] = malloc( (strlen(pch)+1) * sizeof(char));
    strcpy(a[i++], pch);
    printf ("%s\n",pch);
    pch = strtok (NULL, ":");
  }

  for(i = 0 ; i < 3 ; i++)
    printf ("%s\n",a[i]);

  return 0;
}
按照Deduplicator的建议,

strdup也可以提供帮助,但这不是标准的,因此我建议避免(或实施自己的,而不是那么难)。 :)

此外,C中未提供Deduplicator提及的strtok_s

回复OP的评论如下:

问题:str是char str []但是时间是char *。我可以转换吗?

您可以将其分配给这样的数组:

#include <stdio.h>

int main ()
{
  char* from = "15:18:13";
  char to[strlen(from) + 1]; // do not forget +1 for the null character!
  strcpy(to, from);
  printf("%s\n", to);
  return 0;
}

GIFT:我建议你阅读here的第一个答案。

它为char*char[]提供了流畅的解释。

答案 1 :(得分:0)

不需要那些api。 Pebble有超时的api: strftime

tm *tmNext = localtime(&timeRequestTmp);
static char strformatForTimeNext[10];
strftime(strformatForTimeNext,10,"%H:%M",tmNext);
text_layer_set_text(layer_nextTime, strformatForTimeNext);