2014-09-10 72 views
-2

我試圖從位於:e字符之間的str中複製字符。如何從C字符串中的2個分隔符之間複製數據?

我已經char str[] = "192.169.0.1:12345e"; 我能前將數據複製「:」使用strrchr(),但 我怎麼能複製12345字符躺在:e之間?

+1

這段代碼C或C++?選擇一個,因爲語言不同(比如,你爲什麼不使用'std :: string')。 – crashmstr 2014-09-10 19:46:47

+0

找到開始,找到結束,memcpy? – 2014-09-10 19:46:48

+0

@JonathanPotter但如何將地址範圍放在memcpy中? – user3656737 2014-09-10 19:48:58

回答

1

它看起來像你試圖解析一個端口的IP地址。如果是這樣,爲什麼不使用:

char str[] = "192.169.0.1:12345e"; 
unsigned char ipAddress[4]; 
unsigned short int port; 

if (sscanf(str, "%hhu.%hhu.%hhu.%hhu:%hu" 
    , &ipAddress[0] 
    , &ipAddress[1] 
    , &ipAddress[2] 
    , &ipAddress[3] 
    , &port) >= 5) 
{ 
    // use the data... 
} 
+0

我提高了這一點,因爲它似乎解決了真正的問題;)。不過,我認爲你應該比較sscanf的返回值與5相等,而不是測試它是否大於5,因爲這看起來很愚蠢:p。如果它返回6(這是不可能的),那麼我會比返回4:p時更加震驚。 – 2014-09-10 20:14:04

+0

@CarloWood老實說,我會把它寫成編碼風格。我認爲的方式是:如果它小於5就會出現問題。不小於5意味着大於或等於5,其中(有利的)情況我將封裝在'if'中並快樂地沿着我的方式。 [在一個可以返回6的世界](http://knowyourmeme.com/memes/i-dont-want-to-live-on-this-planet-anymore),我不會再相信回報值也是5。 – Gutblender 2014-09-10 20:21:42

0

它依賴於邏輯。例如,如果找不到字符'e',該怎麼辦?

的代碼可能看起來例如通過以下方式

if (char *p = strchr(str, ':')) 
{ 
    while (*++p != 'e' && *p != '\0') *buffer++ = *p; 
    *buffer = '\0'; 
} 

或者

char *p, *q; 

if ((p = strchr(str, ':')) && (q = strchr(p, 'e'))) 
{ 
    while (++p != q) *buffer++ = *p; 
    *buffer = '\0'; 
}  

相反的strchr可以使用strrchr

相關問題