我一定很想念一些简单的东西,但是我没有任何线索。 运行此命令后:
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上无效。
第一个字符串未正确读取。
答案 0 :(得分:1)
通过向其写入“ 7.3”(choixReq
,四个字符)使'7', '.', '3', '\0'
溢出。
如果我将choixReq
改为保留4个字符,则会得到正确的输出:
codeuser 205
choix 7.3
donnee data data