argz_extract()函數,argz_stringify()函數

來源:互聯網
上載者:User

標籤:

函數分別位於glibc源碼中的../glibc-version/string/argz-extract.c和../glibc-version/string/argz-stringify.c中。

函式宣告如下:

// argz.h/* Puts pointers to each string in ARGZ into ARGV, which must be large enough   to hold them all.  */extern void __argz_extract (__const char *__restrict __argz, size_t __len,                char **__restrict __argv) __THROW;extern void argz_extract (__const char *__restrict __argz, size_t __len,              char **__restrict __argv) __THROW;              /* Make ‘\0‘ separated arg vector ARGZ printable by converting all the ‘\0‘s   except the last into the character SEP.  */extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW;extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW;

argz_extract()函數是將argz vector中的元素轉存到argv中,以此實現一維到二維的轉換。注意,argv最後要有一個元素為NULL,以"this is a test"為例,轉換結果如:

argz_stringify()函數是將argz vecotr變成一個正常的字串,以給定的delim字元去替換argz vector中的\0,在上例中假如再給定字元‘,‘那麼得到的結果如:

函數的實現如下:

/* Puts pointers to each string in ARGZ, plus a terminating 0 element, into   ARGV, which must be large enough to hold them all.  */void__argz_extract (const char *argz, size_t len, char **argv){    while (len > 0)    {        size_t part_len = strlen (argz);        *argv++ = (char *) argz;        argz += part_len + 1;        len -= part_len + 1;    }    *argv = 0;}weak_alias (__argz_extract, argz_extract) /* Make ‘\0‘ separated arg vector ARGZ printable by converting all the ‘\0‘s   except the last into the character SEP.  */void__argz_stringify (char *argz, size_t len, int sep){    if (len > 0)        while (1)        {            size_t part_len = __strnlen (argz, len);            argz += part_len;            len -= part_len;            if (len-- <= 1)  /* includes final ‘\0‘ we want to stop at */                break;            *argz++ = sep;        }}libc_hidden_def (__argz_stringify)weak_alias (__argz_stringify, argz_stringify)

 

argz_extract()函數,argz_stringify()函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.