簡體   English   中英

如何在分隔符處將char *拆分為3個char *?

[英]How to split char* into 3 char* at delimiter?

我想分開一個char* time = "15:18:13"; 進入char* hour; char* minute; char* seconds;

問題是我不知道怎么做。 我想嘗試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;
}

根據Deduplicator的建議, strdup也可以提供幫助,但這不是標准的,因此我建議避免(或實施自己的,而不是那么難)。 :)

此外, strtok_s中沒有提供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;
}

禮物:我建議你從這里讀到第一個答案。

它為char*char[]提供了一個平滑的解釋。

不需要那些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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM