我想将char* time = "15:18:13";
分为char* hour;
,char* minute;
和char* seconds;
。
问题是我不知道怎么做。我想尝试Pebble Watchface。我已经使用了char* hour = strok(time, ":");
,但第一个参数必须是char[]
,但时间是char*
。
有谁知道怎么做?
答案 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);