[問題] 從字串中的第5個位元開始抓字串

看板C_and_CPP (C/C++)作者 (哈味)時間8年前 (2016/09/12 14:45), 編輯推噓5(5010)
留言15則, 7人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux GCC 問題(Question): #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char **argv) { char *line = "abc dddd efg hhhhhhhhhh"; /* 從第五個位元開始抓6個位元 也就是抓出來的結果想要是 "dddd e" 目前找C的字串處理函式找不太到 不知道怎麼抓出來 感謝大大的指導 */ return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.164.19 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1473662739.A.D38.html

09/12 14:59, , 1F
foo = line+4;
09/12 14:59, 1F

09/12 14:59, , 2F
printf("%s", foo);
09/12 14:59, 2F

09/12 15:04, , 3F
樓上 這樣缺少要抓六個位元
09/12 15:04, 3F

09/12 15:08, , 4F
%.6s
09/12 15:08, 4F

09/12 16:43, , 5F
use memmove function
09/12 16:43, 5F

09/12 20:09, , 6F
strncpy 然後記得自己加 '\0'
09/12 20:09, 6F

09/12 23:23, , 7F
推 %.6s 和 strncpy
09/12 23:23, 7F

09/13 13:20, , 8F
後續回覆那篇筆戰得真熱鬧... 來此補充以免變那篇的雜訊 :P
09/13 13:20, 8F

09/13 13:20, , 9F
1. 若只是想印出來, 就用 printf 或 fprintf
09/13 13:20, 9F

09/13 13:20, , 10F
2. 若準備了 char buf[N] 來存放, 就用 sprintf 或 snprintf
09/13 13:20, 10F

09/13 13:21, , 11F
3. 若用 char *ptr 接新字串, 用 strndup (GLIBC 2.10 以上)
09/13 13:21, 11F

09/13 13:22, , 12F
或取得空間搭配 2; 但記得用完要釋放掉, 以免 memory leak
09/13 13:22, 12F

09/13 13:22, , 13F
相關細節請自行查 man page 或 google.
09/13 13:22, 13F

09/15 00:56, , 14F
補充樓上,需要 free() 的原因是 strdup() 會用 malloc()
09/15 00:56, 14F

09/15 00:56, , 15F
來產生一個新字串所需的空間,所以別誤用到 delete 了
09/15 00:56, 15F
文章代碼(AID): #1NrayJqu (C_and_CPP)
文章代碼(AID): #1NrayJqu (C_and_CPP)