user-0 提问: 我的代码哪里错了啊？

回复:
user: user-1
content: 因为你第二次查找是从上一次查找到的位置后移25，而不是从上一次开始查找的位置后移25

user: user-1
content: a+=25; 改成： a = (address - szUrl) + 25;

user: user-2
content: #include <stdio.h> #include <string.h> int main() {                	char szUrl[] = "{\"headerInfo\":{\"message\":\"成功\",\"code\":\"W_0000\",\"to404\":false},\"responseContent\":{\"dataList\":[{\"minAmount" 		"\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年8月22日-" 		"2017年10月24日\",\"phoneNumber\":\"18135601804\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省\",\"hl" 		"End\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"驻市\"},{\"m" 		"inAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年" 		"8月22日-2017年10月24日\",\"phoneNumber\":\"18135601874\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省" 		"\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"华东市" 		"\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期" 		"为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135601941\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\"" 		":\"山东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\"" 		":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\"" 		"\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602043\",\"status\":\"2\",\"provinceCode\":\"609904\",\"pr" 		"ovince\":\"华东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0," 		"\"city\":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"special" 		"Offers\":\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602804\",\"status\":\"2\",\"provinceCode\":\"6099" 		"04\",\"province\":\""; 	char numbers[12]; 	char *pos = szUrl;  	while(1) 	{ 		char *address = strstr(pos, "phoneNumber"); 		if (!address) 			break; 		strncpy(numbers,address+14,11); 		printf("%s\n",numbers); 		pos = address + 25; 	}    	return 0; }  参考一下吧；  有多次重复，原因是szUrl每次都加25，这个便宜并没有从第一次找到phoneNumber开始的25，所以第一个phoneNumber对应的数字出现了多次。若用address作为基础向后偏移就可以了。  为了提高效率，减少循环次数。可以不用计算a与strlen(szUrl)的比较。直接判断address是否为NULL即可。 其实整个循环也是因为address指向NULL退出的，a >= strlen(szUrl)条件满足前address已经指向了NULL了，所以直接用while(1)可以省去若干变量和对strlen的调用。

user: user-3
content: 引用 2 楼 wqte45 的回复:[quote=引用 1 楼 user-3的回复:]#include <stdio.h> #include <string.h>  int main(void) {                    char szUrl[] = "{\"headerInfo\":{\"message\":\"成功\",\"code\":\"W_0000\",\"to404\":false},\"responseContent\":{\"dataList\":[{\"minAmount"                     "\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年8月22日-"                     "2017年10月24日\",\"phoneNumber\":\"18135601804\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省\",\"hl"                     "End\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"驻市\"},{\"m"                     "inAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年"                     "8月22日-2017年10月24日\",\"phoneNumber\":\"18135601874\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省"                     "\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"华东市"                     "\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期"                     "为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135601941\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\""                     ":\"山东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\""                     ":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\""                     "\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602043\",\"status\":\"2\",\"provinceCode\":\"609904\",\"pr"                     "ovince\":\"华东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,"                     "\"city\":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"special"                     "Offers\":\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602804\",\"status\":\"2\",\"provinceCode\":\"6099"                     "04\",\"province\":\"";     int len, off = 0;  	char numbers[12] = {0}; 	const char *sub = "\"phoneNumber\":\""; 	len = strlen(sub); 	     while(off < strlen(szUrl))     {         char *address = strstr(szUrl + off, sub);         if(address)          { 			if(strlen(address) >= 27){ 				strncpy(numbers, address + len, 11); 				printf("%s\n",numbers); 			}             off = (address - szUrl + 1);         }else{ 			break; 		}     }        return 0; }  18135601804 18135601874 18135601941 18135602043 18135602804 有没有更简单的实现方式？ 还有我写的代码哪里错了？我一直没找到  请告诉我吧[/quote]除了正则表达式没有更简单的。  a代表偏移量，所以a每次的值是原值加25这么来的，是匹配到的新的首地址减去原串首地址加上至少为1的偏移量后的值。

user: user-0
content: 引用 1 楼 user-3的回复:#include <stdio.h> #include <string.h>  int main(void) {                    char szUrl[] = "{\"headerInfo\":{\"message\":\"成功\",\"code\":\"W_0000\",\"to404\":false},\"responseContent\":{\"dataList\":[{\"minAmount"                     "\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年8月22日-"                     "2017年10月24日\",\"phoneNumber\":\"18135601804\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省\",\"hl"                     "End\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"驻市\"},{\"m"                     "inAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年"                     "8月22日-2017年10月24日\",\"phoneNumber\":\"18135601874\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省"                     "\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"华东市"                     "\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期"                     "为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135601941\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\""                     ":\"山东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\""                     ":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\""                     "\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602043\",\"status\":\"2\",\"provinceCode\":\"609904\",\"pr"                     "ovince\":\"华东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,"                     "\"city\":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"special"                     "Offers\":\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602804\",\"status\":\"2\",\"provinceCode\":\"6099"                     "04\",\"province\":\"";     int len, off = 0;  	char numbers[12] = {0}; 	const char *sub = "\"phoneNumber\":\""; 	len = strlen(sub); 	     while(off < strlen(szUrl))     {         char *address = strstr(szUrl + off, sub);         if(address)          { 			if(strlen(address) >= 27){ 				strncpy(numbers, address + len, 11); 				printf("%s\n",numbers); 			}             off = (address - szUrl + 1);         }else{ 			break; 		}     }        return 0; }  18135601804 18135601874 18135601941 18135602043 18135602804 有没有更简单的实现方式？ 还有我写的代码哪里错了？我一直没找到  请告诉我吧

user: user-3
content: #include <stdio.h> #include <string.h>  int main(void) {                    char szUrl[] = "{\"headerInfo\":{\"message\":\"成功\",\"code\":\"W_0000\",\"to404\":false},\"responseContent\":{\"dataList\":[{\"minAmount"                     "\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年8月22日-"                     "2017年10月24日\",\"phoneNumber\":\"18135601804\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省\",\"hl"                     "End\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"驻市\"},{\"m"                     "inAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期为2017年"                     "8月22日-2017年10月24日\",\"phoneNumber\":\"18135601874\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\":\"河北省"                     "\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\":\"华东市"                     "\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\":\"促销期"                     "为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135601941\",\"status\":\"2\",\"provinceCode\":\"609904\",\"province\""                     ":\"山东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,\"city\""                     ":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"specialOffers\""                     "\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602043\",\"status\":\"2\",\"provinceCode\":\"609904\",\"pr"                     "ovince\":\"华东省\",\"hlEnd\":0,\"cityCode\":\"8411700\",\"prepayMent\":0.0,\"tipText\":\"\",\"typeId\":\"\",\"hlStart\":0,"                     "\"city\":\"华东市\"},{\"minAmount\":0.0,\"salesProdId\":\"000000005930B3EE75FA596CE053AC1410AC221B\",\"level\":1,\"special"                     "Offers\":\"促销期为2017年8月22日-2017年10月24日\",\"phoneNumber\":\"18135602804\",\"status\":\"2\",\"provinceCode\":\"6099"                     "04\",\"province\":\"";     int len, off = 0;  	char numbers[12] = {0}; 	const char *sub = "\"phoneNumber\":\""; 	len = strlen(sub); 	     while(off < strlen(szUrl))     {         char *address = strstr(szUrl + off, sub);         if(address)          { 			if(strlen(address) >= 27){ 				strncpy(numbers, address + len, 11); 				printf("%s\n",numbers); 			}             off = (address - szUrl + 1);         }else{ 			break; 		}     }        return 0; }  18135601804 18135601874 18135601941 18135602043 18135602804