我試圖從位於:
和e
字符之間的str
中複製字符。如何從C字符串中的2個分隔符之間複製數據?
我已經char str[] = "192.169.0.1:12345e";
我能前將數據複製「:」使用strrchr()
,但 我怎麼能複製12345
字符躺在:
和e
之間?
我試圖從位於:
和e
字符之間的str
中複製字符。如何從C字符串中的2個分隔符之間複製數據?
我已經char str[] = "192.169.0.1:12345e";
我能前將數據複製「:」使用strrchr()
,但 我怎麼能複製12345
字符躺在:
和e
之間?
它看起來像你試圖解析一個端口的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...
}
我提高了這一點,因爲它似乎解決了真正的問題;)。不過,我認爲你應該比較sscanf的返回值與5相等,而不是測試它是否大於5,因爲這看起來很愚蠢:p。如果它返回6(這是不可能的),那麼我會比返回4:p時更加震驚。 – 2014-09-10 20:14:04
@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
它依賴於邏輯。例如,如果找不到字符'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
這段代碼C或C++?選擇一個,因爲語言不同(比如,你爲什麼不使用'std :: string')。 – crashmstr 2014-09-10 19:46:47
找到開始,找到結束,memcpy? – 2014-09-10 19:46:48
@JonathanPotter但如何將地址範圍放在memcpy中? – user3656737 2014-09-10 19:48:58