使用 sscanf 和括号使用将字符串分解成小块
decomposing a string into small pieces with sscanf and bracket use
我一定是遗漏了一些非常简单的东西,但我没有任何线索。
在 运行 这个之后:
int main() {
char requete[] = {"205 7.3 data data\n"};
char codeUserReq[9];
char choixReq[3];
char donneeReq[200];
memset(codeUserReq, 0, 5);
memset(choixReq, 0, 3);
memset(donneeReq, 0, 200);
sscanf(requete, "%s %s %[^\n]", codeUserReq, choixReq, donneeReq);
printf("codeuser %s \n",codeUserReq);
printf("choix %s \n",choixReq);
printf("donnee %s \n",donneeReq);
我希望结果是:
codeuser 205
choix 7.3
donnee data data
相反,它是:
codeuser
choix 7.3
donnee data data
此代码在 ubuntu 上有效,但在 debian 上无效。
第一个字符串未正确读取。
您通过向 choixReq
写入“7.3”(因为那是 '7', '.', '3', '[=12=]'
,四个字符)溢出 choixReq
。
如果我将 choixReq
更改为包含 4 个字符,我会得到正确的输出:
codeuser 205
choix 7.3
donnee data data
我一定是遗漏了一些非常简单的东西,但我没有任何线索。 在 运行 这个之后:
int main() {
char requete[] = {"205 7.3 data data\n"};
char codeUserReq[9];
char choixReq[3];
char donneeReq[200];
memset(codeUserReq, 0, 5);
memset(choixReq, 0, 3);
memset(donneeReq, 0, 200);
sscanf(requete, "%s %s %[^\n]", codeUserReq, choixReq, donneeReq);
printf("codeuser %s \n",codeUserReq);
printf("choix %s \n",choixReq);
printf("donnee %s \n",donneeReq);
我希望结果是:
codeuser 205
choix 7.3
donnee data data
相反,它是:
codeuser
choix 7.3
donnee data data
此代码在 ubuntu 上有效,但在 debian 上无效。
第一个字符串未正确读取。
您通过向 choixReq
写入“7.3”(因为那是 '7', '.', '3', '[=12=]'
,四个字符)溢出 choixReq
。
如果我将 choixReq
更改为包含 4 个字符,我会得到正确的输出:
codeuser 205
choix 7.3
donnee data data