[問題] C字串的問題

看板C_and_CPP (C/C++)作者 (DOGE)時間6年前 (2019/05/09 17:03), 編輯推噓3(309)
留言12則, 4人參與, 6年前最新討論串1/1
這是我在寫socket時遇到的問題,平台是linux 我在收到封包後,先取出packetID: if(rcvlen > 0){ printf("rcvbuffer : %s\n", rcvBuffer); char pID[3]; memcpy(pID, &rcvBuffer[1], sizeof(char[2])); if(strcmp(pID, "01") == 0){ //... } } 第一次收到封包時,可以正常進入if,但收到第二個封包之後就不能了 於是我想說把pID印出來看看: if(rcvlen > 0){ printf("rcvbuffer : %s\n", rcvBuffer); char pID[3]; memcpy(pID, &rcvBuffer[1], sizeof(char[2])); printf("pID : %s\n", pID); if(strcmp(pID, "01") == 0){ //... } } 然後我不管幾個封包都能正常進入if了,請問這是甚麼問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.63.206.65 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1557392596.A.04C.html

05/09 17:18, 6年前 , 1F
pID 沒有 initialize,建議在 char pID[3] 後面加一行
05/09 17:18, 1F

05/09 17:19, 6年前 , 2F
memset(pID, 0, sizeof(char)*3);
05/09 17:19, 2F

05/09 17:20, 6年前 , 3F
pID[2] 不是 '\0' 的狀況下 printf 和 strcmp 都會出槌
05/09 17:20, 3F

05/09 17:33, 6年前 , 4F
不太懂為什麼pID[2]一定要是null,c字串不是只要結尾有n
05/09 17:33, 4F

05/09 17:33, 6年前 , 5F
ull就可以成立了嗎?
05/09 17:33, 5F

05/09 18:21, 6年前 , 6F
pID[2]就是結尾啊
05/09 18:21, 6F

05/09 18:23, 6年前 , 7F
strcmp要比對的分別是0, 1, \0,所以第三個位置
05/09 18:23, 7F

05/09 18:23, 6年前 , 8F
自然得要是結尾\0
05/09 18:23, 8F

05/09 19:17, 6年前 , 9F
阿抱歉太想睡了剛剛腦抽
05/09 19:17, 9F

05/10 15:39, 6年前 , 10F
只 memcpy 前兩個 byte 當然第三個得自己填結尾 null
05/10 15:39, 10F

05/10 15:40, 6年前 , 11F
然後我提的 memset 整個清空是比較安全的萬用解法
05/10 15:40, 11F

05/10 15:44, 6年前 , 12F
今天你的狀況也可以直接 pID[2] = '/0'; 處理
05/10 15:44, 12F
文章代碼(AID): #1Sq-pK1C (C_and_CPP)
文章代碼(AID): #1Sq-pK1C (C_and_CPP)