2014-05-01 82 views
-2

我想將char* time = "15:18:13";分爲char* hour;char* minute;char* seconds;如何在分隔符處將char *分割爲3個char *?

問題是我不知道如何。我喜歡嘗試Pebble Watchface。我已經使用char* hour = strok(time, ":");,但第一個參數需要是char[],但時間是char*

有誰知道如何做到這一點?

+2

'strtok_s'你想要做什麼,當且僅當輸入可以被修改。字符串文字是常量,即使它們由於歷史原因而具有類型「char []」。你可能首先需要一個'strdup'('strlen' +'malloc' +'memcpy')。無論如何,在你的情況下,使用'sscanf(s,「%d:%d:%d」,...)簡單掃描數字可能是最好的。 – Deduplicator

+0

使用數據對象不要分割它! –

+0

如果你使用'strdup',我建議你實現你自己的,因爲它不是標準! ;) – gsamaras

回答

1

基於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[]的流暢解釋。

+0

OP的用例是解析常量。 – alk

+0

只是表明,你是對的@alk – gsamaras

+0

這隻適用於時間,所以str是char str [],但時間是char *。我可以轉換嗎? –

0

不需要那些api。圓石灘有超時的API:的strftime

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