我有一个char数组如下:
char* test = "+IPD,308:{data:\"abc\"} UNLINK";
我试图解析它以将块从{
返回到}
,因此在本例中是子字符串{data:\"abc\"}
。
我使用了strchr()
和strrchr()
,它们返回指向单个字符位置的指针;但在这种情况下,如何使用它们返回{data:\"abc\"}
?
发布于 2015-02-26 14:21:19
试试这个:
const char* input = "+IPD,308:{data:\"abc\"} UNLINK";
char* start = strchr(input, '{'); // result should be input[9]
char* end = strrchr(input, '}'); // result should be input[20]
char* output = (char*)malloc(end-start+2); // End-start should be 11 + 2 = 13
strncpy(output, start, end-start+1); // Copy 12 chars.
output[end-start+1] = '\0'; // Append an End-of-String nul
/* Use the output string.... */
free(output); // Very important cleanup!
output = NULL;
它找到第一个大括号,最后一个大括号,分配适当的内存,并执行一个strncpy
来使用相关的数据创建一个新的字符串。
IDE链接:http://ideone.com/sVn147
输出:{data:"abc"}
发布于 2015-02-26 14:19:57
您可以尝试遍历字符串。到达第一个令牌时,开始将字符复制到第二个缓冲区中。到达第二个令牌时,退出循环。
https://stackoverflow.com/questions/28753819
复制相似问题