我想將char* time = "15:18:13";
分爲char* hour;
,char* minute;
和char* seconds;
。如何在分隔符處將char *分割爲3個char *?
問題是我不知道如何。我喜歡嘗試Pebble Watchface。我已經使用char* hour = strok(time, ":");
,但第一個參數需要是char[]
,但時間是char*
。
有誰知道如何做到這一點?
我想將char* time = "15:18:13";
分爲char* hour;
,char* minute;
和char* seconds;
。如何在分隔符處將char *分割爲3個char *?
問題是我不知道如何。我喜歡嘗試Pebble Watchface。我已經使用char* hour = strok(time, ":");
,但第一個參數需要是char[]
,但時間是char*
。
有誰知道如何做到這一點?
基於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;
}
strdup
,通過Deduplicator的建議,也可以幫助,但它不是標準的,因此,我建議,以避免(或實現自己的,不是那麼難)。 :)
此外,strtok_s
是Deduplicator提到不C.
回覆提供以下OP的評論:
問題:str是字符STR [1],但時間是一個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;
}
禮物:我建議你閱讀here第一個答案。
它提供了對char*
和char[]
的流暢解釋。
不需要那些api。圓石灘有超時的API:的strftime
tm *tmNext = localtime(&timeRequestTmp);
static char strformatForTimeNext[10];
strftime(strformatForTimeNext,10,"%H:%M",tmNext);
text_layer_set_text(layer_nextTime, strformatForTimeNext);
'strtok_s'你想要做什麼,當且僅當輸入可以被修改。字符串文字是常量,即使它們由於歷史原因而具有類型「char []」。你可能首先需要一個'strdup'('strlen' +'malloc' +'memcpy')。無論如何,在你的情況下,使用'sscanf(s,「%d:%d:%d」,...)簡單掃描數字可能是最好的。 – Deduplicator
使用數據對象不要分割它! –
如果你使用'strdup',我建議你實現你自己的,因爲它不是標準! ;) – gsamaras