代碼空格是包括使用的sscanf
sscanf(szbuf, "%s %c %s", szTmp1, &szChar, szTmp2);
其中 szubuff是fetch_query = SELECT NAME FROM TABLE1
szChar是=
szbuf
,szTmp1
,szTmp2
是字符陣列。 問題是,szTmp2僅存儲SELECT
而忽略其餘部分。 但我需要完整SELECT NAME FROM TABLE1
裏面szTmp2
代碼空格是包括使用的sscanf
sscanf(szbuf, "%s %c %s", szTmp1, &szChar, szTmp2);
其中 szubuff是fetch_query = SELECT NAME FROM TABLE1
szChar是=
szbuf
,szTmp1
,szTmp2
是字符陣列。 問題是,szTmp2僅存儲SELECT
而忽略其餘部分。 但我需要完整SELECT NAME FROM TABLE1
裏面szTmp2
#include <stdio.h>
#include <string.h>
int main(int argc, const char **argv) {
char str[] = "fetch_query = SELECT NAME FROM TABLE1";
char *qry, *sql;
qry = strtok(str, "=");
sql = strtok(0, "=");
printf("%s -- %s\n", qry, sql);
return 0;
}
輸出:
fetch_query -- SELECT NAME FROM TABLE1
這工作,非常感謝。 – sajal
sscanf中的%s一次只能讀取一個字,即停止在第一個空白處。相反,你可以使用類似以下內容:
sscanf(szbuf, "%s %c %[0-9a-zA-Z ]", szTmp1, &szChar, szTmp2);
其中%[0-9A-ZA-Z]說要繼續閱讀,只要在輸入的字符規範中找到(亞利桑那州是一個範圍的字符)。
由於您使用C++,你應該考慮使用std::string
型而不是C風格的字符串對象和解析字符串格式" var = value "
可以用做字符串流如下:
std::istringstream is("fetch_query = SELECT NAME FROM TABLE1");
std::string var, divider, value;
if ((is >> var >> divider) && divider == "=") // check 1
{
std::getline(is, value);
if (!value.empty()) // check 2
std::cout << "var name: " << var << std::endl
<< "value :" << value << std::endl;
}
「檢查1」條件確保2個單詞是從流中提取,第二個等於字符串"="
。 「檢查2」確保在"="
之後至少還有1個單詞。
var name: fetch_query
value : SELECT NAME FROM TABLE1
PS:以上示例需要#include <iostream>
和#include <sstream>
。
你確定你用C++編程? – LihO
@ LihO:絕對:) – sajal
看到我的答案明白爲什麼我問這個問題,爲什麼這個評論越來越upvotes :) – LihO